কমান্ড লাইন থেকে আমি কীভাবে বেস 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-এইচ সহজ হতে পারে