मैं बेस 64 स्ट्रिंग को डीकोड करने के लिए बैश स्क्रिप्ट लिखना चाहूंगा । उदाहरण के लिए मैं टाइप करता हूं decode QWxhZGRpbjpvcGVuIHNlc2FtZQ== और यह प्रिंट करता है Aladdin:open sesame और प्रॉम्प्ट पर लौटता है ।
अब तक मैंने एक साधारण बैश फ़ाइल की कोशिश की है python -m base64 -d $1 लेकिन यह कमांड एक फ़ाइल नाम की अपेक्षा करता है जो स्ट्रिंग नहीं है । क्या कोई अन्य गैर-इंटरैक्टिव कमांड है (जरूरी नहीं कि एक पायथन मॉड्यूल में) जिसे मैं इसे प्राप्त करने के लिए कमांड लाइन से चला सकता हूं, बिना किसी अतिरिक्त पैकेज को स्थापित किए? (या अगर मैं करता हूं, तो कुछ सुपर-मिनिमल । )
संपादित करें: एक उदाहरण जहां बेस 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.
आपकी मूल निर्भरता के साथ आपकी मूल स्क्रिप्ट में मामूली संशोधन के साथ ऐसा करना संभव है:
echo $1 | python -m base64 -d
यदि आप फ़ाइल नाम पास नहीं करते हैं, तो वह पायथन मॉड्यूल मानक इनपुट से पढ़ता है । इसमें पहले पैरामीटर को पाइप करने के लिए आप उपयोग कर सकते हैं echo $1 |.
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 वर्णों की रेखाओं के बाद से बेहतर है-एक विकल्प छोटी गाड़ी है ( लंबी फ़ाइलों के साथ सीमा) ।
मैं इस पर बाल खींच के कुछ क्षणों था क्योंकि base64 लिनक्स उपकरण और भी openssl वास्तव में डिकोड कर सकते हैं । लेकिन मेरे पास यह विशेष बेस 64 एन्कोडेड फ़ाइल है जो थोड़ा गलत मान को डीकोड करती है । कुछ बाइट्स मेल खाते हैं, लेकिन फिर यह उपस्थिति है EF BF BD EF BF BD जब मैं देखता हूं hexedit दर्शक। और फिर सही ढंग से डिकोड किए गए अपेक्षित आउटपुट की तुलना में बाइट्स का अगला क्रम फिर से मेल खाता है । बाइट्स के इन अजीब अनुक्रम को इन-बीच में डाला गया, कभी-कभी EF BF BD केवल।
मामले को हल करने के लिए, मुझे यह देखना होगा कि जावा प्रेषक इसे कैसे एन्कोड करता है और फिर मैंने एक छोटा जावा बेस 64 डिकोडर बनाया । और अब मैं अपेक्षित मूल्य को डिकोड कर सकता हूं ।