Base64 dizesini komut satırından nasıl çözebilirim?


426

Bir base64 dizesinin kodunu çözmek için bir bash betiği yazmak istiyorum. Örneğin, ben yazıyorum decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==ve yazdırır Aladdin:open sesameve istemine geri döner.

Şimdiye kadar içeren basit bir bash dosyası denedim python -m base64 -d $1ama bu komut bir dize değil bir dosya adı bekliyor. Herhangi bir ekstra paket yüklemek zorunda kalmadan, bunu gerçekleştirmek için komut satırından çalıştırabileceğim başka bir etkileşimli olmayan komut (mutlaka bir Python modülünde değil) var mı? (Ya da yaparsam, süper minimal bir şey.)

Yanıtlar:


630

base64Programı coreutilspaketten kullanmanız yeterlidir:

echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode

Veya yeni satır karakterini dahil etmek için

echo `echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode`

çıktı (newline içerir):

Aladdin:open sesame

10
Veya: echo QWxhZGRpbjpvcGVuIHNlc2FtZQ == | base64 --decode && echo
Greg Chabala

61
Veya:base64 -d <<< QWxhZGRpbjpvcGVuIHNlc2FtZQ==
jmk

4
echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | "C:\Program Files\Git\usr\bin\base64" --decode 2> nul > example.txtGit's base64 ile Windows üzerinde.
Yangın

3
@ Ocak Değil Just use, çünkü çoğu kişi base64programı biliyor - ancak komut satırı seçeneği olarak sadece bir dize ekleyemediğinden, CLI'ya yalnızca bir defa dokunan kullanıcılar için sözdizimi elde etmek zor.
ücret

12
Mac'te, kodlanmış dizeyi panoya kopyalayın ve çalıştırın pbpaste | base64 --decode.
Marián Seperný

95

openssl ayrıca base64'ü kodlayabilir ve kodunu çözebilir

$ openssl enc -base64 <<< 'Hello, World!'
SGVsbG8sIFdvcmxkIQo=
$ openssl enc -base64 -d <<< SGVsbG8sIFdvcmxkIQo=
Hello, World!

EDIT: base64 kodlu dizgisinin birden fazla satırda sona erdiği bir örnek:

$ openssl enc -base64 <<< 'And if the data is a bit longer, the base64 encoded data will span multiple lines.'
QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNv
ZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=
$ openssl enc -base64 -d << EOF
> QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNv
> ZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=
> EOF
And if the data is a bit longer, the base64 encoded data will span multiple lines.

8
Philippe'in cevabı sayesinde, uzun base64 dizeleri için -A eklemeniz gerekir, aksi takdirde openssl hiçbir şey döndürmez, askubuntu.com/a/271676/305568
morloch

@morloch veya sadece newline'ları base64 kodlu verilerden kaldırmaktan kaçının ve beklendiği gibi çalışıyor ...
geirha

1
Ben düşünün olmaz coreutilsgibi programlar içeren bir "ek" paketi ls, mkdir, cp, mv, ve chmod. Makinenle faydalı bir şeyler yapabileceğinden şüpheliyim.
vidstige

@vidstige, bu doğru. Base64'ün varsayılan olarak yüklenmediği izlenimi altında olduğumu bilmiyorum; Bu tamamen durum böyle değil.
geirha

1
Bu ubuntu yığını değişimi olsa da , Windows'ta Git Bash'te çalışma opensslstandardı base64üzerinde en azından benim yüklediğim en eski 1.8.1 Git Bash sürümü üzerinde bir avantaja sahip.
Willkil

38

Hadi bakalım!

Aşağıdakileri ~/.bashrcdosyanızın altına ekleyin :

decode () {
  echo "$1" | base64 -d ; echo
}

Şimdi yeni bir Terminal açın ve komutu çalıştırın.

decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Bu, sorunuzda tam olarak istediğiniz şeyi yapacaktır.


20

Orijinal bağımlılıklarınızla bunu, orijinal komut dosyanızda küçük bir değişiklik yaparak yapmak mümkündür:

echo $1 | python -m base64 -d

Bir dosya adı iletmezseniz, bu python modülü standart girdiden okur. İlk parametreyi içine aktarmak için kullanabilirsiniz echo $1 |.


1
Ayrıca: python -m base32 dosya adı
kenorb 10:12

1
bu işe yaramaz :) ama .b32 * yöntemlerini kullanın
rzr

13

Base64 komut satırını http://wiki.opensslfoundation.com/index.php?title=Command_Line_Utilities adresinde yorum yaptım . Bu nedenle openssl base64 kod çözme işlemi kullanırken bir Uyarı veririm:

 openssl base64 -e <<< 'Welcome to openssl wiki'

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK



openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'

Welcome to openssl wiki

Uyarı tabanı64 satır uzunluğu openssl'de varsayılan olarak 64 karakterle sınırlıdır :

 openssl base64 -e <<< 'Welcome to openssl wiki with a very long line
 that splits...'

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo
 YXQgc3BsaXRzLi4uCg==

openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='

=> HİÇBİR ŞEY!

64 karakteri geçen satır beslemesi olmadan bir base64 satırının kodunu çözebilmek için -A seçeneğini kullanın:

openssl base64 -d -A <<<
'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='

Welcome to openssl wiki with a very long line that splits...

Bu, base64'ü gerçekleştirmek için yine de daha iyidir, çünkü -A bir seçenek BUGGY'dir (uzun dosyalarla sınırlandırılır).


4

kullanma perl

perl -MMIME::Base64 -ne 'printf "%s\n",decode_base64($_)' <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="

Ya da aynı python

python -m base64 -d <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="

2

Sadece bunu yapmak için başka bir yol eklemek için:

emacs -Q --batch  -eval '(princ (base64-encode-string (read-string ": ")))'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.