كيف يمكنني فك شفرة سلسلة قاعدة 64 من سطر الأوامر?

أود أن أكتب سيناريو باش لفك شفرة سلسلة باس64. على سبيل المثال أنا اكتب decode QWxhZGRpbjpvcGVuIHNlc2FtZQ== ويطبع Aladdin:open sesame ويعود إلى موجه.

حتى الآن لقد حاولت ملف باش بسيط يحتوي على python -m base64 -d $1 لكن هذا الأمر يتوقع اسم ملف وليس سلسلة. هل هناك أمر آخر غير تفاعلي (ليس بالضرورة في وحدة بيثون) يمكنني تشغيله من سطر الأوامر لتحقيق ذلك ، دون الحاجة إلى تثبيت أي حزم إضافية? (أو إذا كنت تفعل ، شيء فائقة الحد الأدنى.)

مجرد استخدام base64 برنامج من coreutils الباقة:

echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode

أو ، لتضمين حرف السطر الجديد

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

الإخراج (يشمل السطر الجديد):

Aladdin:open sesame

بينسل يمكن أيضا ترميز وفك شفرة القاعدة64

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

تحرير: مثال حيث تنتهي السلسلة المشفرة باس64 على أسطر متعددة:

$ 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.

ها أنت ذا!

أضف ما يلي إلى الجزء السفلي من ~/.bashrc الملف:

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

الآن ، افتح محطة طرفية جديدة وقم بتشغيل الأمر.

decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==

هذا سوف يفعل بالضبط ما طلبته في سؤالك.

مع التبعيات الأصلية الخاصة بك فمن الممكن القيام بذلك مع تعديل طفيف على السيناريو الأصلي الخاص بك:

echo $1 | python -m base64 -d

إذا كنت لا تمر اسم الملف ، أن وحدة بيثون يقرأ من المدخلات القياسية. لأنابيب المعلمة الأولى في ذلك يمكنك استخدام echo $1 |.

فعلت تعليق سطر الأوامر قاعدة 64 في http://wiki.opensslfoundation.com/index.php?title=Command_Line_Utilities. لذلك أنا إصدار تحذير عند استخدام بينسل قاعدة 64 فك :

 openssl base64 -e <<< 'Welcome to openssl wiki' V2VsY29tZSB0byBvcGVuc3NsIHdpa2kKopenssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'Welcome to openssl wiki

تحذير قاعدة 64 طول الخط يقتصر على 64 حرفا افتراضيا في بينسل :

 openssl base64 -e <<< 'Welcome to openssl wiki with a very long line that splits...' V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo YXQgc3BsaXRzLi4uCg==openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='

>= لا شيء !

لتكون قادرة على فك شفرة خط باس64 دون تغذية الخط الذي يتجاوز 64 حرفا استخدام-خيار :

openssl base64 -d -A <<<'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRoYXQgc3BsaXRzLi4uCg=='Welcome to openssl wiki with a very long line that splits...

هذا هو على أي حال أفضل لتقسيم قاعدة 64 نتيجة في 64 حرفا خطوط منذ-الخيار هو عربات التي تجرها الدواب (الحد مع ملفات طويلة ).

باستخدام perl

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

أو نفس الشيء مع python

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

فقط لإضافة طريقة أخرى للقيام بذلك:

emacs -Q --batch  -eval '(princ (base64-encode-string (read-string ": ")))'

كان لي لحظات قليلة من سحب الشعر على هذا واحد لأن base64 أداة لينكس وأيضا openssl يمكن فك ، في الواقع. ولكن لدي هذا الملف المشفر بيس 64 الذي يترجم إلى قيمة خاطئة قليلا. تتطابق البايتات القليلة، ولكن بعد ذلك يوجد هذا الوجود EF BF BD EF BF BD عندما أرى في hexedit عارض. ثم يتطابق التسلسل التالي من وحدات البايت مرة أخرى عند مقارنته بالإخراج المتوقع الذي تم فك تشفيره بشكل صحيح. هذه تسلسل غريب من بايت حصلت على إدراجها في بين ، في وقت ما EF BF BD فقط.

لحل هذه المسألة ، لا بد لي من النظر في كيفية ترميز المرسل جافا ومن ثم أنا خلقت جافا قاعدة صغيرة 64 فك. والآن يمكنني فك الشفرة إلى القيمة المتوقعة.

هنا هو المقتطف الصغير الذي يفعل ذلك: https://gist.github.com/typelogic/0567cdab6c15487c31496cb90006ff52

سؤال لطيف. وشكرا للتلميح الخاص بك ، وأنا أعلم الآن ‘بيثون-م قاعدة 64-ح’ يمكن أن تصبح في متناول يدي.