ฉันจะถอดรหัสสตริงเบส 64 จากบรรทัดคำสั่งได้อย่างไร


426

ฉันต้องการเขียนสคริปต์ทุบตีเพื่อถอดรหัสสตริงเบส 64 ตัวอย่างเช่นฉันพิมพ์decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==และมันพิมพ์Aladdin:open sesameและกลับไปที่พรอมต์

จนถึงตอนนี้ฉันได้ลองใช้ไฟล์ bash แบบง่าย ๆ ที่มีpython -m base64 -d $1คำสั่งนี้แล้ว แต่คาดว่าชื่อไฟล์ไม่ใช่สตริง มีอีกคำสั่งที่ไม่โต้ตอบ (ไม่จำเป็นในโมดูล Python) ที่ฉันสามารถเรียกใช้จากบรรทัดคำสั่งเพื่อให้บรรลุนี้โดยไม่ต้องติดตั้งแพคเกจพิเศษใด ๆ ? (หรือถ้าฉันทำบางสิ่งบางอย่างน้อยมาก)

คำตอบ:


630

เพียงใช้base64โปรแกรมจากcoreutilsแพ็คเกจ:

echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode

หรือเพื่อรวมอักขระบรรทัดใหม่

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

เอาท์พุท (รวมถึงการขึ้นบรรทัดใหม่):

Aladdin:open sesame

10
หรือ: echo QWxhZGRpbjpvcGVuIHNlc2FtZQ == | base64 --decode && echo
Greg Chabala

61
หรือ:base64 -d <<< QWxhZGRpbjpvcGVuIHNlc2FtZQ==
jmk

4
echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | "C:\Program Files\Git\usr\bin\base64" --decode 2> nul > example.txtบน Windows ด้วย git's base64
ไฟ

3
@January มันไม่ได้เป็นJust useเพราะหลายคนรู้เกี่ยวกับbase64โปรแกรม - แต่เป็นหนึ่งไม่สามารถเพียงแค่ใส่สตริงเป็นตัวเลือกบรรทัดคำสั่งมันเป็นเรื่องยากที่จะได้รับไวยากรณ์ที่เหมาะสมสำหรับผู้ใช้ที่สัมผัส CLI เพียงครั้งเดียวในขณะที่
feeela

12
บน Mac pbpaste | base64 --decodeคัดลอกสตริงเข้ารหัสลงในคลิปบอร์ดและเรียกใช้
MariánČerný

95

openssl ยังสามารถเข้ารหัสและถอดรหัส base64

$ openssl enc -base64 <<< 'Hello, World!'
SGVsbG8sIFdvcmxkIQo=
$ openssl enc -base64 -d <<< SGVsbG8sIFdvcmxkIQo=
Hello, World!

แก้ไข: ตัวอย่างที่สตริงที่เข้ารหัส base64 สิ้นสุดในหลายบรรทัด:

$ 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
ขอบคุณคำตอบของ Philippe คุณต้องเพิ่ม -A สำหรับสตริง base64 แบบยาวมิฉะนั้น openssl จะไม่ส่งคืนอะไรให้ดูaskubuntu.com/a/271676/305568
morloch

@morloch หรือเพียงแค่หลีกเลี่ยงการลบบรรทัดใหม่จาก base64 ข้อมูลที่เข้ารหัสและการทำงานเป็นไปตามคาด ...
geirha

1
ฉันจะไม่พิจารณาcoreutilsแพคเกจ "เพิ่มเติม" ที่มีโปรแกรมเช่นls, mkdir, cp, และmv chmodฉันสงสัยว่าคุณสามารถทำสิ่งใดที่มีประโยชน์กับเครื่องของคุณโดยที่ไม่มีมัน
vidstige

@ vidstige นั่นเป็นเรื่องจริง ฉันไม่รู้ว่าทำไมฉันจึงรู้สึกว่า base64 ไม่ได้ถูกติดตั้งเป็นค่าเริ่มต้น นั่นไม่ใช่กรณีทั้งหมด
geirha

1
ในขณะที่นี่คือการแลกเปลี่ยนสแต็คอูบุนตูการใช้opensslมีความได้เปรียบเหนือมาตรฐานbase64การทำงานใน Git Bash บน Windows อย่างน้อยรุ่น 1.8.1 Git Bash ที่ฉันติดตั้งไว้
willkil

38

ไปเลย!

เพิ่มสิ่งต่อไปนี้ที่ด้านล่างของ~/.bashrcไฟล์ของคุณ:

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

ตอนนี้เปิดเทอร์มินัลใหม่และเรียกใช้คำสั่ง

decode QWxhZGRpbjpvcGVuIHNlc2FtZQ==

สิ่งนี้จะทำสิ่งที่คุณต้องการในคำถามของคุณ


20

ด้วยการอ้างอิงดั้งเดิมของคุณคุณสามารถทำได้ด้วยการดัดแปลงเล็กน้อยกับสคริปต์ต้นฉบับของคุณ:

echo $1 | python -m base64 -d

หากคุณไม่ผ่านชื่อไฟล์โมดูลหลามนั้นจะอ่านจากอินพุตมาตรฐาน echo $1 |ท่อพารามิเตอร์แรกเป็นมันคุณสามารถใช้


1
นอกจากนี้: python -m ชื่อไฟล์
base32

1
สิ่งนี้ใช้ไม่ได้ :) แต่ใช้วิธีการ. b32 *
rzr

13

ฉันไม่ได้แสดงความคิดเห็นบรรทัดคำสั่ง base64 ในhttp://wiki.opensslfoundation.com/index.php?title=Command_Line_Utilities ดังนั้นฉันจึงออกคำเตือนเมื่อใช้การถอดรหัส openssl base64:

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

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK



openssl base64 -d <<< 'V2VsY29tZSB0byBvcGVuc3NsIHdpa2kK'

Welcome to openssl wiki

เตือนความยาวบรรทัด base64 ถูก จำกัด ที่ 64 ตัวอักษรโดยค่าเริ่มต้นใน openssl :

 openssl base64 -e <<< 'Welcome to openssl wiki with a very long line
 that splits...'

 V2VsY29tZSB0byBvcGVuc3NsIHdpa2kgd2l0aCBhIHZlcnkgbG9uZyBsaW5lIHRo
 YXQgc3BsaXRzLi4uCg==

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

=> ไม่มีอะไร!

เพื่อให้สามารถถอดรหัสบรรทัด base64 โดยไม่ต้องป้อนบรรทัดที่เกิน 64 อักขระให้ใช้ตัวเลือก -A:

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

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

ต่อไปนี้เป็นการดียิ่งกว่าการแยก base64 จริงในบรรทัด 64 ตัวอักษรเนื่องจากตัวเลือก -A เป็น BUGGY (จำกัด ด้วยไฟล์ยาว)


4

การใช้ perl

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

หรือเหมือนกันกับ python

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.