কমান্ড লাইন থেকে আমি কীভাবে একটি বেস 64 স্ট্রিংটি ডিকোড করতে পারি?


426

আমি বেস 64 স্ট্রিংটি ডিকোড করতে বাশ স্ক্রিপ্ট লিখতে চাই। উদাহরণস্বরূপ আমি টাইপ করি decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==এবং এটি প্রিন্ট Aladdin:open sesameকরে প্রম্পটে ফিরে আসে।

এখন পর্যন্ত আমি একটি সহজ বাশ ফাইল সমন্বিত চেষ্টা করেছি python -m base64 -d $1কিন্তু এই কমান্ডটি কোনও ফাইলের নাম স্ট্রিং নয় not কোনও অতিরিক্ত প্যাকেজ ইনস্টল না করেই আমি আর প্রাপ্ত করার জন্য কমান্ড লাইন থেকে চালাতে পারি এমন আরও একটি নন-ইন্টারেক্টিভ কমান্ড (অজস্রভাবে পাইথন মডিউলে নেই)? (বা যদি আমি করি তবে অতি-সর্বনিম্ন কিছু)

উত্তর:


630

প্যাকেজ base64থেকে প্রোগ্রামটি ব্যবহার করুন coreutils:

echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode

অথবা, নিউলাইন চরিত্রটি অন্তর্ভুক্ত করতে

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

আউটপুট (নিউলাইন অন্তর্ভুক্ত):

Aladdin:open sesame

10
বা: প্রতিধ্বনি QWxhZGRpbjpvcGVuIHNlc2FtZQ == | বেস 64
গ্রেগ চাবালা

61
বা:base64 -d <<< QWxhZGRpbjpvcGVuIHNlc2FtZQ==
জেএমকে

4
echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | "C:\Program Files\Git\usr\bin\base64" --decode 2> nul > example.txtউইন্ডোজ গিট এর বেস 64 এর সাথে।
ফায়ার

3
@ জানুয়ারী এটি নয় Just use, কারণ অনেকে base64প্রোগ্রাম সম্পর্কে জানেন - তবে কমান্ড লাইন বিকল্প হিসাবে কেউ কেবল একটি স্ট্রিং সন্নিবেশ করতে পারে না , ব্যবহারকারীরা যখন সিএলআই স্পর্শ করেন কেবল একবারে সিন্টেক্সটি সঠিকভাবে পাওয়া শক্ত।
ফিয়েল

12
ম্যাক-এ, এনকোডযুক্ত স্ট্রিংটি ক্লিপবোর্ডে অনুলিপি করুন এবং রান করুন pbpaste | base64 --decode
মারিওন আর্নে

95

ওপেনসেল বেস 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.'
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.

8
ফিলিপের উত্তরের জন্য আপনাকে ধন্যবাদ, দীর্ঘ বেস 64 স্ট্রিংয়ের জন্য আপনাকে একটি যুক্ত করতে হবে অন্যথায় ওপেনসেল
/

@ এমরলচ বা কেবল বেস 64 এনকোডড ডেটা থেকে নতুন লাইনগুলি সরাতে এড়াতে এবং এটি প্রত্যাশার মতো কাজ করে ...
গিরিহা

1
আমি বিবেচনা করবে না coreutilsমত প্রোগ্রাম ধারণকারী একটি "অতিরিক্ত" প্যাকেজ ls, mkdir, cp, mv, এবং chmod। আমি সন্দেহ করি আপনি এটিকে ছাড়া আপনার মেশিনের সাহায্যে দরকারী কিছু করতে পারেন।
প্রকাশ

@ ভিডস্টিজ, এটি সত্য। আমি জানি না কেন আমি এই ছাপের মধ্যে ছিলাম যে বেস 64 ডিফল্টরূপে ইনস্টল করা হয়নি; এটি সম্পূর্ণরূপে হয় না।
গিরিহা

1
যদিও এটি উবুন্টু স্ট্যাক এক্সচেঞ্জ, উইন্ডোজে গিত বাশ-এ কাজ করার opensslমানের base64তুলনায় আরও সুবিধা রয়েছে , আমি কমপক্ষে পুরানো ১.৮.১ গিট বাশ সংস্করণ ইনস্টল করেছি।
উইলকিল

38

এই যে!

আপনার ~/.bashrcফাইলের নীচে নিম্নলিখিতগুলি যুক্ত করুন:

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

এখন, একটি নতুন টার্মিনাল খুলুন এবং কমান্ডটি চালান।

decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==

এটি আপনার প্রশ্নে যা চেয়েছিল ঠিক তা করবে।


20

আপনার আসল নির্ভরতার সাথে আপনার মূল স্ক্রিপ্টে সামান্য পরিবর্তন করে এটি করা সম্ভব:

echo $1 | python -m base64 -d

আপনি যদি কোনও ফাইলের নাম পাস না করেন তবে সেই পাইথন মডিউলটি স্ট্যান্ডার্ড ইনপুট থেকে পড়ে। এটিতে প্রথম প্যারামিটারটি পাইপ করতে আপনি ব্যবহার করতে পারেন echo $1 |


1
এছাড়াও: পাইথন-মি বেস 32 ফাইলের নাম
কেনোরব

1
এটি কার্যকর হয় না :) তবে .b32 * পদ্ধতিগুলি ব্যবহার করুন
rzr

13

আমি http://wiki.opensslfoundation.com/index.php?title=Command_Line_Utilities- এ বেস 64 কমান্ড লাইনের মন্তব্য করেছি । সুতরাং আমি ওপেনসেল বেস 64 ডিকোডিং ব্যবহার করার সময় একটি সতর্কতা জারি করি:

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

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK



openssl 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 অক্ষরের বেশি exceedএ বিকল্পটি ব্যবহার করে:

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

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

এটি split৪ টি অক্ষরের লাইনে প্রকৃতপক্ষে বিভক্ত বেস 64৪ এর ফলাফলের চেয়ে ভাল, যেহেতু -A বিকল্পটি বুজি (দীর্ঘ ফাইলের সাথে সীমাবদ্ধ)।


4

ব্যবহার perl

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

বা একই সাথে python

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

2

এটি করার জন্য আরও একটি উপায় যুক্ত করতে:

emacs -Q --batch  -eval '(princ (base64-encode-string (read-string ": ")))'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.