มีคำสั่งเทอร์มินัลใน Mac OS X ซึ่งจะ base64 เข้ารหัสไฟล์หรือ stdin หรือไม่?
openssl
ธงสำหรับการถอดรหัสอยู่-d
ใน OS X (10.10 Yosemite)
มีคำสั่งเทอร์มินัลใน Mac OS X ซึ่งจะ base64 เข้ารหัสไฟล์หรือ stdin หรือไม่?
openssl
ธงสำหรับการถอดรหัสอยู่-d
ใน OS X (10.10 Yosemite)
คำตอบ:
openssl
สามารถทำสิ่งนี้เพื่อคุณได้และทุกอย่างจะถูกติดตั้งพร้อมกับ OS X โดยค่าเริ่มต้น ไม่จำเป็นต้องติดตั้งดาร์วินสปอร์ต
$ openssl base64 -in <infile> -out <outfile>
ไม่มี-in
ตัวเลือกอ่านจาก stdin
openssl base64 < path/to/file.png | tr -d '\n' | pbcopy
หรือcat path/to/file.png | openssl base64 | tr -d '\n' | pbcopy
เพื่อข้ามการเขียนไปที่ไฟล์และเพียงคัดลอกเอาต์พุตที่เข้ารหัส 64 ฐานไปยังคลิปบอร์ดโดยไม่ต้องขึ้นบรรทัดใหม่
-d
ธงเพื่อถอดรหัส
openssl base64 -e <<< ram
และถอดรหัส:openssl base64 -d <<< cmFtCg==
openssl base64 [-e] -A
ไม่ว่า + @kenny ในการถอดรหัสหากอินพุตไม่ได้ขึ้นบรรทัดใหม่ทุก ๆ 76 ตัวอักษรรวมถึงกรณีที่ไม่ได้ขึ้นบรรทัดใหม่ที่ฉันเพิ่งระบุคุณต้องการ-d -A
หรือคุณจะได้รับข้อมูลที่ขาดหายไปหรือเสียหายโดยไม่มีข้อความแสดงข้อผิดพลาด อาจส่งผลให้แก้ไข)
openssl base64 -e <<< ram
เข้ารหัส 4 ไบต์จริงรวมถึงการป้อนบรรทัดต่อท้าย; เห็นhexdump <<< ram
ไหม
Openssl สามารถใช้งานได้กระชับยิ่งขึ้น:
echo -n 'input' | openssl base64
ต้องใช้ [echo -n -> มิฉะนั้นการเข้ารหัสจะกระทำรวมถึงอักขระบรรทัดใหม่]
หรือ
openssl base64 <ENTER> [type input] <CTRL+D>
openssl base64 <<< input
base64
openssl
ฉันต้องกด Ctrl + D สองครั้ง และระวัง @Garret: ในทุบตีด้วยหรือไม่openssl
, openssl base64 <<< superuser
และopenssl base64 <<< "superuser"
ไม่สมควรให้ผลผลิตc3VwZXJ1c2VyCg==
เป็น "ที่นี่สตริง" แล้วยังรวมถึงฟีดสาย! ( เห็นได้ชัดว่าไม่เพียง แต่ใน Bash แต่ยังอยู่ใน zsh, ksh และ yash ดูhexdump <<< superuser
ผลลัพธ์ Base64 ควรเป็นc3VwZXJ1c2Vy
)
echo -n
เป็นที่ต้องการหากคุณไม่ต้องการขึ้นบรรทัดใหม่ เป็นสิ่งที่ต้องระวังอย่างแน่นอน
printf
แทนecho -n
ลองใช้:
base64 -i <in-file> -o <outfile>
ควรมีให้เป็นค่าเริ่มต้นใน OS X
--decode
เพื่อย้อนกลับกระบวนการจาก base64 เป็นปกติ
openssl base64
นี่คือสะอาดกว่าการส่งออกจาก ขอบคุณ!
base64
คำสั่งพร้อมใช้งานโดยค่าเริ่มต้นใน OS X 10.9.4 ของฉัน
คุณสามารถใช้base64 <<< string
และbase64 -D <<< string
เพื่อเข้ารหัสและถอดรหัสสตริงในเทอร์มินัลหรือbase64 -in file
และbase64 -D -in file
เพื่อเข้ารหัสและถอดรหัสไฟล์
Invalid characer in input stream
เมื่อใช้<<<
... ฉันได้ลอง"
แล้ว'
และไม่มีอะไรรอบ ๆ สตริง
เนื่องจาก Python มีให้ใน OS X โดยค่าเริ่มต้นคุณสามารถใช้งานได้ดังต่อไปนี้:
$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO
หรือติดตั้งcoreutils
ผ่านBrew ( brew install coreutils
) ซึ่งจะให้base64
คำสั่ง:
$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
ในแง่ของความเร็วฉันจะใช้ openssl ตามด้วย perl ตามด้วย uuencode ในแง่ของการพกพาฉันจะใช้ uuencode ตามด้วย Perl ตามด้วย openssl (ถ้าคุณสนใจที่จะใช้รหัสซ้ำใน UNIX อื่น ๆ เช่นแพลตฟอร์มหุ้นมากที่สุด) ระวังด้วยว่าเพราะไม่ใช่รุ่น UNIX ทั้งหมดที่สนับสนุนสวิตช์ -m (iirc AIX ทำ, HP / UX ทำ, Solaris ไม่ได้)
$ 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
ใช้สวิตช์ -m เพื่อ uuencode file_in.txt ต่อ base64 ตามที่ระบุโดย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
คุณสามารถไพพ์ไปยังคลิปบอร์ดได้ (อย่างน้อยใน mac):
openssl base64 -in [filename] | pbcopy
base64 < [filename] | pbcopy
ใน macOS ฉันมักจะใช้:
echo -n "STRING" | base64
-n คือการหลีกเลี่ยงอักขระบรรทัดใหม่ที่ท้ายบรรทัด
Python มาพร้อมกับการติดตั้งบน macs ทุกเครื่องในปัจจุบัน
ใน Terminal รัน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)
แน่นอนการดำเนินการทั้งสองสามารถแปลงเป็น oneliner ได้ แต่วิธีนี้สามารถอ่านได้มากขึ้น
## 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
ยูทิลิตี้ ootb อื่นนำเสนอทั้งใน OSX และ Ubuntu:
## 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
uuencode -m [-o output_file] [file] name
โดยที่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
ด้วยเหตุผลบางอย่างecho -n <data> | openssl base64
เพิ่มบรรทัดใหม่ตรงกลางข้อมูล base64 ของฉัน ฉันคิดว่ามันเป็นเพราะข้อมูล base64 ของฉันมันยาวมาก
ใช้echo -n <data> | base64
เพื่อเข้ารหัสและecho -n <base64-ed data> | base64 -D
ถอดรหัสทำงานได้ดี
นอกเหนือจากคำตอบของ Steve Folly ด้านบนเมื่อเข้ารหัสในโหมด stdin เพื่อหลีกเลี่ยงการขึ้นบรรทัดใหม่ให้กด CTRL + D สองครั้งเพื่อสิ้นสุดอินพุตโดยไม่ขึ้นบรรทัดใหม่ใด ๆ ผลลัพธ์จะแสดงทันทีหลังจากบรรทัดเดียวกัน
ตัวอย่างเช่น:
$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$
หรือคุณสามารถใช้printf
:
$ printf 'input' | openssl base64
aW5wdXQ=
$
มี Perl บวก MIME :: Base64:
perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}'
สิ่งนี้ติดตั้งมาล่วงหน้า คุณสามารถระบุไฟล์แยกต่างหากในบรรทัดคำสั่ง (หรือจัดหาข้อมูลในอินพุตมาตรฐาน); แต่ละไฟล์มีการเข้ารหัสแยกต่างหาก คุณยังสามารถทำสิ่งต่อไปนี้
perl -i.txt -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' file1
สิ่งนี้สำรอง file1 เป็น file1.txt และเขียนเอาต์พุตที่เข้ารหัส Base-64 บนไฟล์ต้นฉบับ
NodeJS เวอร์ชั่นง่าย ๆ :
node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
openssl
(และตอนนี้base64
) มาพร้อมกับระบบปฏิบัติการ
recode ควรทำเคล็ดลับสำหรับคุณ
recode ../b64 < file.txt > file.b64
base64
คำสั่งเพียงแค่
หากคุณเข้ารหัส base64 ไฟล์ฟอนต์คุณสามารถทำได้:
base64 my-webfont.ttf > my-webfont.b64.ttf.txt
ฉันใช้มันกับ Mac (10.10) ตลอดเวลา
หมายเหตุ : จะไม่มีการแพร่กระจาย
เรารวบรวมรายการคำสั่งเชลล์ข้ามแพลตฟอร์มเพื่อเข้ารหัสไฟล์เป็น base64 คำสั่งต่อไปนี้ใช้ไฟล์อินพุต (มีชื่อdeploy.key
ในตัวอย่าง) และแปลงเป็น base64 โดยไม่มีการตัดบรรทัดใหม่ เอาต์พุต base64 ถูกพิมพ์ไปยังเทอร์มินัลผ่าน stdout
# 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 เพื่อลบบรรทัดใหม่
base64 -d
หรือbase64 -D
ขึ้นอยู่กับระบบปฏิบัติการของคุณ-D
ใช้ OSX