سؤال كيف يمكنني فك ترميز سلسلة base64 من سطر الأوامر؟


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

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


320
2017-08-21 12:17


الأصل




الأجوبة:


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

echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode

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

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

الإخراج (يتضمن سطر جديد):

Aladdin:open sesame

484
2017-08-21 13:34



أو: صدى QWxhZGRpbjpvcGVuIHNlc2FtZQ == | base64 --decode && echo - Greg Chabala
أو: base64 -d <<< QWxhZGRpbjpvcGVuIHNlc2FtZQ== - jmk
echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | "C:\Program Files\Git\usr\bin\base64" --decode 2> nul > example.txt على ويندوز مع قاعدة g64 ل. - Fire
January ليس كذلك Just useلأن الكثير من الناس يعرفون عن base64 برنامج - ولكن كما لا يمكن للمرء مجرد إدراج سلسلة كخيار سطر الأوامر ، من الصعب الحصول على صيغة صحيحة للمستخدمين الذين يلمسون CLI مرة واحدة فقط في الوقت. - feeela
على نظام التشغيل Mac ، انسخ السلسلة المشفرة في الحافظة وتشغيلها pbpaste | base64 --decode. - Marián Černý


openssl يمكن أيضا ترميز وفك قاعدة base64

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

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

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

75
2017-08-21 22:23



بفضل الإجابة فيليب ، تحتاج إلى إضافة -A لسلاسل base64 طويلة وإلا سوف openssl إرجاع أي شيء ، انظر askubuntu.com/a/271676/305568 - morloch
morloch أو مجرد تجنب إزالة الخطوط الجديدة من البيانات المشفرة base64 ، وأنها تعمل كما هو متوقع ... - geirha
أنا لا أعتبر coreutils حزمة "إضافية" تحتوي على برامج مثل ls، mkdir، cp، mvو chmod. أشك في أنك تستطيع أن تفعل أي شيء مفيد مع جهازك دون ذلك. - vidstige
vidstige ، هذا صحيح. لا أعرف لماذا كنت تحت الانطباع بأن Base64 لم يتم تثبيته بشكل افتراضي. هذا ليس هو الحال تماما. - geirha
في حين أن هذا هو تبادل كومة أوبونتو ، وذلك باستخدام openssl لديه ميزة أكثر من القياسية base64 العمل في Git Bash على نظام Windows ، على الأقل الإصدار 1.8.1 Git Bash الذي قمت بتثبيته. - willkil


ها أنت ذا!

أضف التالي إلى أسفل الخاص بك ~/.bashrc ملف:

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

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

decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==

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


32
2017-08-21 13:39





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

echo $1 | python -m base64 -d

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


18
2017-10-05 12:15



أيضا: اسم بيثون -m base32 - kenorb
هذا لا يعمل :) ولكن استخدام أساليب .b32 * - rzr


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

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

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK



openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'

Welcome to openssl wiki

تحذير طول سطر base64 يقتصر على 64 حرفًا افتراضيًا في openssl :

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

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo
 YXQgc3BsaXRzLi4uCg==

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

=> لا شيء!

لتتمكن من فك تشفير سطر base64 بدون تغذية سطر يتجاوز 64 حرفًا ، استخدم الخيار -A:

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

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

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


12
2018-03-23 18:23



Seth يرجى إعادة تعيين كتل بشكل صحيح ، ودمج الأمر openssl دمجها مع تعليقات بلدي مع الإشارة. - philippe lhardy
يمكنك إصلاحه؟ لا أستطيع التفريق بين الاثنين ... سأحاول ، ولكن قد تحتاج إلى مساعدتي ؛-) - Seth♦
جيدا فقط لإلقاء نظرة على wiki.opensslfoundation.com/... حيث تمكنت من استخدام صيغة wiki بشكل أفضل (البحث bas64 في هذه الصفحة). - philippe lhardy


عن طريق perl

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

أو مع نفسه python

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

4
2017-07-02 20:22





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

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

2
2018-06-15 06:27