Bir base64 dizesini çözmek için bir bash betiği yazmak istiyorum. Örneğin, yazıyorum decode QWxhZGRpbjpvcGVuIHNlc2FtZQ== ve yazdırıyor Aladdin:open sesame ve komut istemine geri döner.
Şimdiye kadar aşağıdakileri içeren basit bir bash dosyası denedim python -m base64 -d $1 ancak bu komut bir dize değil bir dosya adı bekler. Herhangi bir ek paket yüklemeye gerek kalmadan bunu başarmak 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.)
DÜZENLEME: Base64 kodlanmış 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.'QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNvZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=$ openssl enc -base64 -d << EOF> QW5kIGlmIHRoZSBkYXRhIGlzIGEgYml0IGxvbmdlciwgdGhlIGJhc2U2NCBlbmNv> ZGVkIGRhdGEgd2lsbCBzcGFuIG11bHRpcGxlIGxpbmVzLgo=> EOFAnd if the data is a bit longer, the base64 encoded data will span multiple lines.
openssl base64 -e <<< 'Welcome to openssl wiki' V2VsY29tZSB0byBvcGVuc3NsIHdpa2kKopenssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'Welcome to openssl wiki
uyarı openssl'de base64 satır uzunluğu 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 aşan satır beslemesi olmayan 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, aslında base64 sonucunu 64 karakter satırına bölmek için daha iyidir, çünkü - Bir seçenek buggy'dir (uzun dosyalarla sınırlayın).
Bu sefer birkaç dakika saçımı çektim çünkü base64 Linux aracı ve ayrıca openssl gerçekten çözebilir. Ama biraz yanlış değere çözen bu özel base64 kodlu dosyam var. Birkaç bayt eşleşir, ancak o zaman bu varlık vardır EF BF BD EF BF BD içeri baktığımda hexedit görüntüleyici. Ve sonra bir sonraki bayt dizisi, doğru şekilde çözülmüş beklenen çıktıya kıyasla tekrar eşleşir. Bu garip bayt dizisi, aradaki boşluklara, bazen EF BF BD sadece.
Sorunu çözmek için Java göndericisinin nasıl kodladığına bakmam gerekiyor ve sonra küçük bir java base64 kod çözücü oluşturdum. Ve şimdi beklenen değeri çözebilirim.