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

317

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

Şimdiye kadar python -m base64 -d içeren basit bir bash dosyasını denedim, ancak bu komut bir dizge değil bir dosya adı bekliyor. Ekstra paketler kurmak zorunda kalmadan, bunu gerçekleştirmek için komut satırından çalıştırabileceğim başka bir etkileşimli olmayan komut (Python modülünde değil) var mı? (Ya da yaparsam, çok az bir şey.)

    
sordu d3vid 21.08.2012 14:17

7 cevap

477

base64 programını coreutils paketinden kullanmanız yeterli:

echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode

Veya, yeni satır karakterini eklemek için

echo 'echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode'

çıkışı (yeni satır içerir):

Aladdin:open sesame
    
verilen cevap January 21.08.2012 15:34
74

openssl ayrıca base64 kodlayabilir ve deşifre edebilir

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

DÜZENLEME: base64 kodlu dizenin birden çok satırda bittiğ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.
    
verilen cevap geirha 22.08.2012 00:23
32

İşte git!

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

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

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

decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Bu, sorunuzda tam olarak istediğiniz şeyi yapacağız.

    
verilen cevap SirCharlo 21.08.2012 15:39
18

Orijinal bağımlılıklarınızla, bunu orijinal betiğinize küçük bir değişiklikle yapmak mümkündür:

echo  | python -m base64 -d

Bir dosya adını aktarmazsanız, bu python modülü standart girişten okur. İlk parametreyi içine aktarmak için echo | .

kullanabilirsiniz.

    
verilen cevap AmanicA 05.10.2012 14:15
12

İşte 'de base64 komut satırı yorumunu yaptım. Bu yüzden openssl base64 kod çözme kullanırken bir Uyarı veririm:

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

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK



openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'

Welcome to openssl wiki

base64 satırının uzunluğu openssl :

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

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo
 YXQgc3BsaXRzLi4uCg==

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

= & gt; NOTHING!

64 karakterden daha büyük bir satır beslemesi olmayan bir base64 satırını -A seçeneği kullanarak çözebilir:

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

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

Yine de, -A seçeneği BUGGY (uzun dosyalarla sınır) olduğundan, 64 karakterli satırda base64 sonucunu ayırmak daha iyidir.

    
verilen cevap philippe lhardy 23.03.2013 19:23
4

perl

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

Ya da python ile aynı

python -m base64 -d <<< "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
    
verilen cevap A.B. 02.07.2015 22:22
2

Bunu yapmak için başka bir yol eklemek için:

emacs -Q --batch  -eval '(princ (base64-encode-string (read-string ": ")))'
    
verilen cevap erjoalgo 15.06.2016 08:27

Etiketlerdeki diğer soruları oku