सवाल कमांड लाइन के माध्यम से base64 को एन्कोड कैसे करें?


क्या मैक ओएस एक्स में टर्मिनल कमांड है जो बेस 64 एन्कोड फ़ाइल या स्टडीन करेगा?


167
2018-03-16 23:15


मूल


ध्यान रखें कि हालांकि बेस 64-एन्कोडिंग सिंटैक्स एक ओएस से दूसरे में सुसंगत है, बेस 64-डिकोडिंग सिंटैक्स या तो है base64 -d या base64 -D आपके ऑपरेटिंग सिस्टम के आधार पर। ओएसएक्स का उपयोग करता है -D। - Chris Johnson
@ChrisJohnson यदि संगीत कार्यक्रम में प्रयोग किया जाता है openssl डिकोडिंग के लिए ध्वज है -d ओएस एक्स (10.10 योसेमेट) पर। - ᴠɪɴᴄᴇɴᴛ


जवाब:


openssl यह आपके लिए कर सकता है, और यह डिफ़ॉल्ट रूप से ओएस एक्स के साथ स्थापित है; Darwinports स्थापित करने की कोई ज़रूरत नहीं है।

$ openssl base64 -in <infile> -out <outfile>

के बिना -in विकल्प stdin से पढ़ता है


185
2018-03-17 00:25



उपयोग openssl base64 < path/to/file.png | tr -d '\n' | pbcopy या cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopy एक फ़ाइल में लेखन छोड़ने के लिए और लाइन ब्रेक के बिना बस 6464 एन्कोडेड आउटपुट क्लिपबोर्ड पर कॉपी करें। - Mathias Bynens
और एक का उपयोग करें -d डीकोड करने के लिए ध्वज। - kenny
मैक में, बेस 64 को एक स्ट्रिंग एन्कोड करने के लिए: openssl base64 -e <<< ram और डीकोड करने के लिए: openssl base64 -d <<< cmFtCg== - Ram Patra
@mathias अगर आप कोई नई लाइन नहीं चाहते हैं openssl base64 [-e] -A क्या वो। + डिकोड पर @ केनी अगर इनपुट में हर 76 वर्णों में सबसे ज्यादा न्यूलाइन नहीं है, जिसमें मैंने अभी कहा है कि न्यू-न्यूलाइन केस नहीं है, तो आपको चाहिए -d -A या आपको गायब या दूषित डेटा मिलेगा कोई त्रुटि संदेश के साथ (हालांकि एक लंबित बग रिपोर्ट है जिसके परिणामस्वरूप उसे ठीक किया जा सकता है)। - dave_thompson_085
@राम, openssl base64 -e <<< ram वास्तव में एक बाईलिंग लाइन फ़ीड सहित 4 बाइट एन्कोड करता है; देख hexdump <<< ram। - Arjan


Openssl अधिक संक्षेप में इस्तेमाल किया जा सकता है:

echo -n 'input' | openssl base64

[echo -n -> का उपयोग किया जाना चाहिए, या एन्कोडिंग नई लाइन चरित्र सहित किया जाएगा]

या

openssl base64 <ENTER> [type input] <CTRL+D>

66
2018-04-21 06:12



"गूंज" समाधान इनपुट स्ट्रिंग के अंत में एक एलएफ (लाइन फीड) चार जोड़ता है, हालांकि। बेहतर उपयोग: echo -n 'इनपुट' - SuperTempel
और यहां तक ​​कि थोड़ा और संक्षिप्त openssl base64 <<< input - Garrett Fogerlie
या बस उपयोग करें base64 के बिना openssl। किसी भी तरह से, मुझे दो बार Ctrl + D दबाएं। और सावधान रहें, @ गारेट: बैश में, बिना या बिना openssl, openssl base64 <<< superuser तथा openssl base64 <<< "superuser"  ग़लती से प्राप्ति c3VwZXJ1c2VyCg==, "यहां स्ट्रिंग" के रूप में फिर भी एक लाइन फ़ीड शामिल है! (जाहिरा तौर पर न केवल बैश में, बल्कि zsh, ksh और yash में भी। देख hexdump <<< superuser। बेस 64 परिणाम होना चाहिए c3VwZXJ1c2Vy।) - Arjan
@ अरजन मैं "गलती से" शब्द का उपयोग करने में संकोच करूंगा - जैसा कि आपने बताया है, यहां स्ट्रिंग में एक पंक्ति फ़ीड शामिल है, लेकिन अच्छे कारण के लिए - unix.stackexchange.com/questions/20157/... । echo -n अगर आपको नई लाइन की आवश्यकता नहीं है तो उसे प्राथमिकता दी जाती है। यह निश्चित रूप से कुछ पता होना चाहिए। - Steve Folly
आप उपयोग कर सकते हैं printf की जगह में echo -n - Jason S


उपयोग करने का प्रयास करें:

base64 -i <in-file> -o <outfile>

यह ओएस एक्स पर डिफ़ॉल्ट रूप से उपलब्ध होना चाहिए।


33
2018-02-27 20:13



महान। सरल और सुरुचिपूर्ण। धन्यवाद! - Leon li
जोड़ना --decode प्रक्रिया को बेस 64 से सामान्य तक रिवर्स करने के लिए। - luckydonald


base64 आदेश मेरे ओएस एक्स 10.9.4 पर डिफ़ॉल्ट रूप से उपलब्ध है।

आप उपयोग कर सकते हैं base64 <<< string तथा base64 -D <<< string टर्मिनल में एक स्ट्रिंग को एन्कोड और डीकोड करने के लिए, या base64 -in file तथा base64 -D -in file फ़ाइल को एन्कोड और डीकोड करने के लिए।


24
2018-03-17 02:48



आपके पास कोई उदाहरण है? मुझे मिला Invalid characer in input stream उपयोग करते समय <<<... मैंने कोशिश की है ", ' और स्ट्रिंग के चारों ओर कुछ भी नहीं। - Jonas
@ जोनास आप किस शैल में हैं? आप इसे बैश और zsh में उपयोग कर सकते हैं। - WKPlus
आह, कभी नहीं, यह काम करता है! - Jonas


चूंकि पायथन को डिफ़ॉल्ट रूप से ओएस एक्स के साथ प्रदान किया जाता है, इसलिए आप इसे नीचे के रूप में उपयोग कर सकते हैं:

$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO

या स्थापित करें coreutils के जरिए शराब बनाना (brew install coreutils) जो प्रदान करेगा base64 आदेश:

$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO

6
2018-05-25 17:19





गति के मामले में, मैं openssl का उपयोग करता हूं जिसके बाद perl, यूयूएनकोड के बाद। पोर्टेबिलिटी के मामले में, मैं यूएनकोड का उपयोग करता हूं जिसके बाद पर्ल द्वारा ओपनएसएल (यदि आप जितना संभव हो सके स्टॉक प्लेटफ़ॉर्म जैसे अन्य यूनिक्स पर कोड का पुन: उपयोग करने की परवाह करते हैं)। हालांकि सावधान रहें क्योंकि सभी यूनिक्स वेरिएंट -एम स्विच का समर्थन नहीं करते हैं (आईआईआरसी एईक्स करता है, एचपी / यूएक्स करता है, सोलारिस नहीं करता है)।

$ time perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' \
> out.jpg 1>filename.b64
real    0m0.025s

$ time uuencode -m -o filename.b64 out.jpg filename_when_uudecoded.txt
real    0m0.051s

$  time openssl base64 -in out.jpg -out filename.b64 
real    0m0.017s

जैसा कि निर्दिष्ट है, uuencode file_in.txt प्रति बेस 64 पर -एम स्विच का उपयोग करें RFC1521 और इसे filename.b64 पर लिखें (filename_when_uudecoded.txt के साथ डीकोड किए जाने पर डिफ़ॉल्ट फ़ाइल नाम के रूप में):

uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt

एसटीडीआईएन उदाहरण:

cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt

5
2017-09-05 07:43





आप इसे क्लिपबोर्ड पर भी पाइप कर सकते हैं (कम से कम मैक पर):

openssl base64 -in [filename] | pbcopy


4
2017-07-12 15:39



गोल्फ: base64 < [filename] | pbcopy - totels


uuencode -m [-o output_file] [file] name

कहा पे नाम एनकोडेड हेडर में प्रदर्शित करने का नाम है।

उदाहरण:

cat docbook-xsl.css | uuencode -m docbook-xsl.css

या

uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css

2
2018-04-04 20:12



uuencode एन्कोडिंग के रूप में नहीं है base64 - ccpizza


किसी कारण के लिए, echo -n <data> | openssl base64 मेरे बेस 64 डेटा के बीच में एक नई लाइन जोड़ा। मुझे लगता है कि ऐसा इसलिए था क्योंकि मेरा बेस 64 डेटा वास्तव में लंबा था।

का उपयोग करते हुए echo -n <data> | base64 एन्कोड करने के लिए और echo -n <base64-ed data> | base64 -D ठीक काम करने के लिए decode करने के लिए।


2
2017-07-27 05:16



nb: मेरे निक्स पर, मुझे -d echo -n c29tZXVzZXI6c29tZXBhc3N3b3Jk का उपयोग करना पड़ा था। base64 -d someuser: somepassword - mlo55


अजगर

पाइथन आजकल सभी मैक पर प्रीइंस्टॉल आता है।

टर्मिनल रन में python (या IPython)।

फ़ाइल को एन्कोड करें:

 base64data = open('myfile.jpg','rb').read().encode('base64')
 open('myfile.txt','w').write(base64data)

एक फाइल डीकोड करें:

data = open('myfile.txt').read().decode('base64')
open('myfile.jpg','wb').write(data)

बेशक, दोनों परिचालनों को ऑनलाइनर में परिवर्तित किया जा सकता है लेकिन इस तरह यह अधिक पठनीय है।

OpenSSL

## encode to base64 (on OSX use `-output`)
openssl base64 -in myfile.jpg -output myfile.jpg.b64

## encode to base64 (on Linux use `-out`)
openssl base64 -in myfile.jpg -out myfile.jpg.b64


## decode from base64 (on OSX `-output` should be used)
openssl base64 -d -in myfile.jpg.b64 -output myfile.jpg

## decode from base64 (on Linux `-out` should be used)
openssl base64 -d -in myfile.jpg.b64 -out myfile.jpg

ओमेटिंग -out/-output... filename stdout पर प्रिंट करेंगे।

बेस 64

ओएसएक्स और उबंटू दोनों में एक और ओओटीबी उपयोगिता मौजूद है:

## encode to base64
base64 < myfile.jpg > myfile.jpg.b64

## decode from base64 (OSX) (note the uppercase 'D')
base64 -D < myfile.jpg.b64 > myfile.jpg

## decode from base64 (Linux) (note the lowercase 'd')
base64 -d < myfile.jpg.b64 > myfile.jpg

2
2018-06-17 10:00





पर्ल प्लस एमआईएमई :: बेस 64 है:

perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}'

यह पूर्व स्थापित है। आप कमांड लाइन पर अलग-अलग फाइलें निर्दिष्ट कर सकते हैं (या मानक इनपुट पर डेटा की आपूर्ति); प्रत्येक फ़ाइल अलग से एन्कोड किया जाता है। आप यह भी कर सकते हैं:

perl -i.txt -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' file1

यह file1.txt में फ़ाइल 1 का बैक अप लेता है, और मूल फ़ाइल पर बेस -64 एन्कोडेड आउटपुट लिखता है।


1
2018-03-17 04:24