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


215

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


5
ध्यान रखें कि यद्यपि बेस 64-एन्कोडिंग सिंटैक्स एक ओएस से दूसरे में संगत है, बेस 64-डिकोडिंग सिंटैक्स base64 -dया तो base64 -Dआपके ऑपरेटिंग सिस्टम पर निर्भर करता है। OSX का उपयोग करता है -D
क्रिस जॉनसन

@ क्रिसहॉसन यदि opensslडिकोडिंग के लिए ध्वज के साथ कंसर्ट में उपयोग किया जाता है, तो वह -dओएस एक्स (10.10 योसेमाइट) पर होता है।
ᴠɪɴᴄᴇɴᴛ

जवाबों:


229

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

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

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


79
किसी फ़ाइल में लिखने के लिए उपयोग करें openssl base64 < path/to/file.png | tr -d '\n' | pbcopyया cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopyछोड़ें और बस लाइन टूटने के बिना क्लिपबोर्ड पर बेस 64-एन्कोडेड आउटपुट को कॉपी करें।
मथियास ब्यनेंस

3
और -dडिकोड करने के लिए एक ध्वज का उपयोग करें ।
केनी डेसी

5
Mac में, To6464 एक स्ट्रिंग को एनकोड करता है: openssl base64 -e <<< ramऔर डिकोड करने के लिए:openssl base64 -d <<< cmFtCg==
Ram Patra

8
@ मथियास अगर आप चाहते हैं कि कोई भी नई खबर न आए openssl base64 [-e] -A। + @ डेनी पर अगर इनपुट में हर 76 वर्णों पर नईलाइन नहीं है, तो मेरे द्वारा बताए गए नो-न्यूलाइन्स मामले सहित, आपको कोई ज़रूरत नहीं है -d -Aया आपको कोई त्रुटि संदेश के साथ लापता या दूषित डेटा मिलेगा (हालांकि एक लंबित बग रिपोर्ट है जो इसके परिणामस्वरूप ठीक हो सकता है)।
dave_thompson_085 27'15

2
@ राम, openssl base64 -e <<< ramवास्तव में 4 बाइट्स को एनकोड करता है, जिसमें एक अनुगामी रेखा फ़ीड भी शामिल है; देखते हैं hexdump <<< ram
अर्जन

92

Openssl का उपयोग अधिक आसानी से किया जा सकता है:

echo -n 'input' | openssl base64

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

या

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

10
"इको" समाधान इनपुट स्ट्रिंग के अंत में एक LF (लाइन फीड) चार जोड़ता है, हालांकि। बेहतर उपयोग: इको-एन 'इनपुट'
सुपरटेम्पेल

7
और यहां तक ​​कि थोड़ा अधिक openssl base64 <<< input
रसीला

2
या base64बिना उपयोग के openssl। किसी भी तरह से, मुझे दो बार Ctrl + D दबाना होगा। और सावधान रहना, @Garret: बैश में, के साथ या बिना openssl, openssl base64 <<< superuserऔर openssl base64 <<< "superuser" ग़लती से उपज c3VwZXJ1c2VyCg=="यहाँ स्ट्रिंग" तो अभी भी एक लाइन फीड शामिल के रूप में,! ( जाहिरा तौर पर न केवल बाश में, बल्कि zsh, ksh और यश में भी। देखें hexdump <<< superuser। बेस 64 परिणाम होना चाहिए c3VwZXJ1c2Vy।)
अर्जन

@ अर्जन मैं "त्रुटिपूर्ण" शब्द का उपयोग करने में संकोच करूंगा - जैसा कि आपने बताया, यहां स्ट्रिंग में एक पंक्ति फ़ीड शामिल है, लेकिन अच्छे कारण के लिए - unix.stackexchange.com/questions/20157/…echo -nयदि आपको नईलाइन की आवश्यकता नहीं है, तो इसे प्राथमिकता दी जाती है। यह निश्चित रूप से जागरूक होने के लिए कुछ है।
स्टीव फॉली

2
आप के printfस्थान पर उपयोग कर सकते हैंecho -n
जेसन एस

50

प्रयोग करके देखें:

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

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


1
जोड़े --decodeबेस 64 से सामान्य करने के लिए प्रक्रिया को उल्टा करने के लिए।
भाग्योदयकाल

1
यह एसवीजी के लिए एन्कोडिंग के लिए बेहतर है क्योंकि यह एक पंक्ति बनाता है। यह आउटपुट से साफ है openssl base64। धन्यवाद!
शनीमल

32

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

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


आपके पास कोई उदाहरण है? मैं Invalid characer in input streamउपयोग करते समय मिलता हूं <<<... मैंने कोशिश की है ", 'और स्ट्रिंग के आसपास कुछ भी नहीं है।
जोनास

@ जोनास आप किस खोल में हैं? आप इसे बाश और zsh में उपयोग कर सकते हैं।
WKPlus

आह, कोई बात नहीं, यह काम करता है!
जोनास

8

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

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

या ब्रू केcoreutils माध्यम से स्थापित करें ( ) जो कमांड प्रदान करेगा :brew install coreutilsbase64

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

5

गति के संदर्भ में, मैं ओपनसेल का उपयोग करता हूं, उसके बाद पर्ल, उसके बाद यूनुकोड। पोर्टेबिलिटी के संदर्भ में, मैं uuencode का उपयोग पर्ल के बाद ओपनसेल (यदि आप कोड को पुन: उपयोग करने के बारे में परवाह करते हैं, तो संभव है कि स्टॉक प्लेटफॉर्म जैसे कई अन्य यूनिक्स पर)। हालांकि सावधान रहें क्योंकि सभी UNIX वेरिएंट -m स्विच (iirc AIX does, HP / UX does, Solaris does) का समर्थन नहीं करते हैं।

$ 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

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

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

STDIN उदाहरण:

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

5

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

openssl base64 -in [filename] | pbcopy


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

5

MacOS पर मैं हमेशा उपयोग करता हूं:

echo -n "STRING" | base64

-एन लाइन के अंत में एक नई लाइन चरित्र से बचने के लिए है।


3

अजगर

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

टर्मिनल रन 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

OSX और उबंटू दोनों में मौजूद एक और ootb यूटिलिटी:

## 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
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

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

2

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

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


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

2

ऊपर दिए गए स्टीव फोली के जवाब के अलावा, जब स्टडिन मोड में एन्क्रिप्ट किया जाता है, तो अतिरिक्त नईलाइनों को पारित करने से बचने के लिए, CTRL + D को दो बार दबाकर बिना किसी अतिरिक्त newlines के इनपुट समाप्त कर सकते हैं। आउटपुट एक ही लाइन के ठीक बाद दिखाई देगा।

उदाहरण के लिए:

$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$

वैकल्पिक रूप से, आप उपयोग कर सकते हैं printf:

$ printf 'input' | openssl base64
aW5wdXQ=
$

1

पर्ल प्लस माइम :: बेस 64:

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

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

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

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


1

एक सरल NodeJS संस्करण:

node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"

मुझे नहीं लगता कि यह openssl(और अब base64) ओएस के साथ एक बेहतर जवाब है ।
जोश

बालों को विभाजित करने के जोखिम में - और, मुझे पता है कि यह आलोचना कुछ अन्य उत्तरों पर लागू होती है, साथ ही - यह सवाल पूछा गया है कि फ़ाइल या स्टड को कैसे एनकोड किया जाए । यदि मैं गलत नहीं हूँ, तो आपका उत्तर केवल यह दर्शाता है कि किसी स्ट्रिंग को कैसे एनकोड करना है।
जी-मैन

1

recode आप के लिए चाल करना चाहिए

recode ../b64 < file.txt > file.b64

MacPorts के माध्यम से OS X के लिए रिकोड उपलब्ध है ।


इसमें कुछ भी नहीं बनाया गया है?
जोश

@ जोश - वहाँ है - खुलता है
स्टीव फॉली

MacPorts किसी भी OS X वितरण के साथ नहीं आते हैं। अन्य बहुत सारे विकल्प हैं जो करते हैं। उदाहरण के लिए सिर्फ base64कमांड।
जेसन एस

1

यदि आप एक फॉन्ट फाइल को बेस 64 एन्कोडिंग कर रहे हैं, तो आप यह कर सकते हैं:

base64 my-webfont.ttf > my-webfont.b64.ttf.txt

मैं एक मैक (10.10) पर हर समय इसका उपयोग करता हूं।

नोट : कोई लाइनब्रेक नहीं होगा।


1

क्रॉस-प्लेटफॉर्म समाधान

हमने किसी फाइल को बेस 64 के रूप में एनकोड करने के लिए क्रॉस-प्लेटफॉर्म शेल कमांड की एक सूची तैयार की है। निम्न आदेश एक इनपुट फ़ाइल लेते हैं ( deploy.keyउदाहरणों में नामित ) और इसे बिना किसी नई रैपिंग के बेस 64 में रूपांतरित करें। बेस 64 आउटपुट को स्टडआउट के माध्यम से टर्मिनल पर प्रिंट किया जाता है।

# For systems with openssl
openssl base64 -A -in=deploy.key

# For systems with Python (2 or 3) installed
python -c "import base64; print(base64.standard_b64encode(open('deploy.key', 'rb').read()).decode())"

# For Windows or Linux systems that have the GNU coreutils base64 command
base64 --wrap=1000000 deploy.key

# For macOS systems
base64 --break=1000000 deploy.key

किसी फ़ाइल में आउटपुट को रीडायरेक्ट करने के लिए, अपेंड करें > base64-encoded.txt(अपने चयन के फ़ाइल नाम का उपयोग करके)।

इन आदेशों को इस पुल अनुरोध के हिस्से के रूप में प्रोटोटाइप किया गया था, जहां हम base64 में क्रॉस-प्लेटफॉर्म शेल कमांड चाहते थे ताकि नईलाइनों को हटाने के लिए SSH निजी कुंजी को एनकोड किया जा सके।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.