Câu trả lời:
openssl
có thể làm điều này cho bạn và tất cả đều được cài đặt với OS X theo mặc định; không cần cài đặt darwinports.
$ openssl base64 -in <infile> -out <outfile>
Không có -in
tùy chọn đọc từ stdin
openssl base64 < path/to/file.png | tr -d '\n' | pbcopy
hoặc cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopy
bỏ qua việc ghi vào một tệp và chỉ sao chép đầu ra được mã hóa base64 vào bảng tạm mà không bị ngắt dòng.
-d
lá cờ để giải mã.
openssl base64 -e <<< ram
và để giải mã:openssl base64 -d <<< cmFtCg==
openssl base64 [-e] -A
nào làm điều đó. + @kenny khi giải mã nếu đầu vào không có dòng mới tối đa 76 ký tự, bao gồm cả trường hợp không có dòng mới tôi vừa nêu, bạn cần -d -A
hoặc bạn sẽ bị mất hoặc bị hỏng dữ liệu không có thông báo lỗi (mặc dù có báo cáo lỗi đang chờ xử lý có thể dẫn đến một sửa chữa cho điều đó).
openssl base64 -e <<< ram
thực sự mã hóa 4 byte, bao gồm một nguồn cấp dữ liệu theo sau; thấy hexdump <<< ram
.
Openssl có thể được sử dụng ngắn gọn hơn:
echo -n 'input' | openssl base64
[echo -n -> phải được sử dụng hoặc mã hóa sẽ được thực hiện bao gồm cả ký tự dòng mới]
hoặc là
openssl base64 <ENTER> [type input] <CTRL+D>
openssl base64 <<< input
base64
mà không có openssl
. Dù bằng cách nào, tôi cần nhấn Ctrl + D hai lần. Và hãy cẩn thận, @Garret: trong Bash, có hoặc không openssl
, openssl base64 <<< superuser
và mang lại kết quả openssl base64 <<< "superuser"
saic3VwZXJ1c2VyCg==
, vì "chuỗi ở đây" sau đó vẫn bao gồm một nguồn cấp dữ liệu! ( Rõ ràng không chỉ ở Bash, mà cả zsh, ksh và yash. Xem hexdump <<< superuser
. Kết quả Base64 sẽ là c3VwZXJ1c2Vy
.)
echo -n
được ưa thích nếu bạn không cần dòng mới. Đó chắc chắn là một cái gì đó để nhận thức.
printf
thay choecho -n
Hãy thử sử dụng:
base64 -i <in-file> -o <outfile>
Nó nên có sẵn theo mặc định trên OS X.
--decode
để đảo ngược quá trình từ cơ sở64 sang bình thường.
openssl base64
. Cảm ơn!
base64
lệnh có sẵn theo mặc định trên OS X 10.9.4 của tôi.
Bạn có thể sử dụng base64 <<< string
và base64 -D <<< string
để mã hóa và giải mã một chuỗi trong nhà ga, hay base64 -in file
và base64 -D -in file
để mã hóa và giải mã một tập tin.
Invalid characer in input stream
khi sử dụng <<<
... Tôi đã thử với "
, '
và không có gì xung quanh chuỗi.
Vì Python được cung cấp với OS X theo mặc định, bạn có thể sử dụng nó như dưới đây:
$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO
Hoặc cài đặt coreutils
qua Brew ( brew install coreutils
) sẽ cung cấp base64
lệnh:
$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
Về tốc độ, tôi sẽ sử dụng openssl theo sau là perl, tiếp theo là uuencode. Về tính di động, tôi sẽ sử dụng uuencode theo sau là Perl và theo sau là openssl (Nếu bạn quan tâm đến việc sử dụng lại mã trên càng nhiều nền tảng UNIX khác như nền tảng chứng khoán càng tốt). Mặc dù vậy, hãy cẩn thận vì không phải tất cả các biến thể UNIX đều hỗ trợ chuyển đổi -m (iirc AIX có, HP / UX không, Solaris không).
$ 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
Sử dụng chuyển đổi -m sang uuencode file_in.txt trên cơ sở64 như được chỉ định bởi RFC1521 và ghi nó vào filename.b64 (với filename_when_uudecoding.txt làm tên tệp mặc định khi được giải mã):
uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt
Ví dụ STDIN:
cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt
Python được cài đặt sẵn trên tất cả các máy Mac hiện nay.
Trong Terminal chạy python
(hoặc ipython ).
Mã hóa một tập tin:
base64data = open('myfile.jpg','rb').read().encode('base64')
open('myfile.txt','w').write(base64data)
Giải mã một tập tin:
data = open('myfile.txt').read().decode('base64')
open('myfile.jpg','wb').write(data)
Tất nhiên, cả hai hoạt động có thể được chuyển đổi thành một oneliner nhưng theo cách này nó dễ đọc hơn.
## 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
Bỏ qua -out
/ -output... filename
sẽ in ra thiết bị xuất chuẩn.
Một tiện ích ootb khác có trong cả OSX và 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
Trong đó tên là tên để hiển thị trong tiêu đề được mã hóa.
Thí dụ:
cat docbook-xsl.css | uuencode -m docbook-xsl.css
hoặc là
uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css
uuencode
không phải là mã hóa nhưbase64
Vì một số lý do, echo -n <data> | openssl base64
đã thêm một dòng mới vào giữa dữ liệu base64 của tôi. Tôi cho rằng đó là vì dữ liệu cơ sở của tôi rất dài.
Sử dụng echo -n <data> | base64
để mã hóa và echo -n <base64-ed data> | base64 -D
giải mã hoạt động tốt.
Ngoài câu trả lời của Steve Folly ở trên, khi mã hóa ở chế độ stdin, để tránh vượt qua các dòng mới, hãy nhấn CTRL + D hai lần để kết thúc đầu vào mà không cần thêm dòng mới nào. Đầu ra sẽ hiển thị ngay sau cùng một dòng.
Ví dụ:
$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$
Ngoài ra, bạn có thể sử dụng printf
:
$ printf 'input' | openssl base64
aW5wdXQ=
$
Có Perl cộng với MIME :: Base64:
perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}'
Điều này được cài đặt sẵn. Bạn có thể chỉ định các tệp riêng biệt trên dòng lệnh (hoặc cung cấp dữ liệu trên đầu vào tiêu chuẩn); mỗi tệp được mã hóa riêng biệt. Bạn cũng có thể làm:
perl -i.txt -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' file1
Điều này sao lưu file1 thành file1.txt và ghi đầu ra được mã hóa Base-64 lên trên tệp gốc.
Một phiên bản NodeJS đơn giản:
node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
openssl
(và bây giờ base64
) đi kèm với HĐH.
recode nên làm thủ thuật cho bạn
recode ../b64 < file.txt > file.b64
recode có sẵn cho OS X thông qua MacPorts .
base64
lệnh.
Nếu bạn đang mã hóa base64 một tệp phông chữ, bạn có thể làm điều này:
base64 my-webfont.ttf > my-webfont.b64.ttf.txt
Tôi sử dụng điều này trên máy Mac (10.10) mọi lúc.
Lưu ý : Sẽ không có ngắt dòng.
Chúng tôi đã biên soạn một danh sách các lệnh shell đa nền tảng để mã hóa một tệp dưới dạng base64. Các lệnh sau lấy một tệp đầu vào (được đặt tên deploy.key
trong các ví dụ) và chuyển đổi nó thành base64 mà không có bất kỳ gói mới nào. Đầu ra base64 được in tới thiết bị đầu cuối thông qua thiết bị xuất chuẩn.
# 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
Để chuyển hướng đầu ra thành một tệp, hãy nối thêm > base64-encoded.txt
(sử dụng tên tệp bạn chọn).
Các lệnh này được tạo nguyên mẫu như một phần của yêu cầu kéo này , nơi chúng tôi muốn các lệnh shell đa nền tảng để base64 mã hóa khóa riêng SSH để xóa dòng mới.
base64 -d
hoặcbase64 -D
tùy thuộc vào hệ điều hành của bạn. OSX sử dụng-D
.