Jawaban:
openssl
dapat melakukan ini untuk Anda, dan semuanya diinstal dengan OS X secara default; tidak perlu menginstal darwinports.
$ openssl base64 -in <infile> -out <outfile>
Tanpa -in
opsi membaca dari stdin
openssl base64 < path/to/file.png | tr -d '\n' | pbcopy
atau cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopy
untuk lewati menulis ke file dan cukup salin output yang disandikan base64 ke clipboard tanpa jeda baris.
-d
bendera untuk memecahkan kode.
openssl base64 -e <<< ram
dan untuk mendekode:openssl base64 -d <<< cmFtCg==
openssl base64 [-e] -A
melakukannya. + @kenny pada decode jika input tidak memiliki baris baru setiap 76 karakter paling banyak, termasuk kasus no-baris baru yang saya sebutkan, Anda perlu -d -A
atau Anda akan mendapatkan data yang hilang atau rusak tanpa pesan kesalahan (walaupun ada laporan bug yang tertunda yang dapat menyebabkan perbaikan untuk itu).
openssl base64 -e <<< ram
sebenarnya mengkodekan 4 byte, termasuk feed garis trailing; lihat hexdump <<< ram
.
Openssl dapat digunakan dengan lebih ringkas:
echo -n 'input' | openssl base64
[echo -n -> harus digunakan, atau pengkodean akan dilakukan termasuk karakter baris baru]
atau
openssl base64 <ENTER> [type input] <CTRL+D>
openssl base64 <<< input
base64
tanpa openssl
. Either way, saya perlu menekan Ctrl + D dua kali. Dan berhati-hatilah, @ Garret: di Bash, dengan atau tanpa openssl
, openssl base64 <<< superuser
dan openssl base64 <<< "superuser"
salah menghasilkan c3VwZXJ1c2VyCg==
, sebagai "string di sini" maka masih termasuk umpan baris! ( Rupanya tidak hanya di Bash, tetapi juga di zsh, ksh dan yash. Lihat hexdump <<< superuser
. Hasil Base64 seharusnya c3VwZXJ1c2Vy
.)
echo -n
lebih disukai jika Anda tidak memerlukan baris baru. Ini tentu sesuatu yang harus diperhatikan.
printf
sebagai penggantiecho -n
Coba gunakan:
base64 -i <in-file> -o <outfile>
Ini harus tersedia secara default pada OS X.
--decode
untuk membalikkan proses dari base64 ke normal.
openssl base64
. Terima kasih!
base64
perintah tersedia secara default di OS X saya 10.9.4.
Anda dapat menggunakan base64 <<< string
dan base64 -D <<< string
untuk menyandikan dan mendekode string dalam terminal, atau base64 -in file
dan base64 -D -in file
untuk menyandikan dan mendekode file.
Invalid characer in input stream
ketika menggunakan <<<
... Saya telah mencoba "
, '
dan tidak ada di sekitar string.
Karena Python disediakan dengan OS X secara default, Anda dapat menggunakannya sebagai berikut:
$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO
Atau instal coreutils
melalui Brew ( brew install coreutils
) yang akan memberikan base64
perintah:
$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
Dalam hal kecepatan, saya akan menggunakan openssl diikuti oleh perl, diikuti oleh uuencode. Dalam hal portabilitas, saya akan menggunakan uuencode diikuti oleh Perl diikuti oleh openssl (Jika Anda ingin menggunakan kembali kode pada banyak UNIX lain seperti platform saham mungkin). Berhati-hatilah karena tidak semua varian UNIX mendukung -m switch (iirc AIX, HP / UX, Solaris tidak).
$ 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
Gunakan -m beralih ke uuencode file_in.txt per base64 seperti yang ditentukan oleh RFC1521 dan menulisnya ke namafile.b64 (dengan namafile_when_uudecoded.txt sebagai nama file default ketika diterjemahkan):
uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt
Contoh STDIN:
cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt
Python sudah diinstal pada semua mac saat ini.
Di Terminal run python
(atau ipython ).
Encode file:
base64data = open('myfile.jpg','rb').read().encode('base64')
open('myfile.txt','w').write(base64data)
Dekode file:
data = open('myfile.txt').read().decode('base64')
open('myfile.jpg','wb').write(data)
Tentu saja, kedua operasi dapat dikonversi menjadi oneliner tetapi dengan cara ini lebih mudah dibaca.
## 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
Menghilangkan -out
/ -output... filename
akan mencetak ke stdout.
Utilitas ootb lain hadir baik di OSX dan 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
Di mana nama adalah nama untuk ditampilkan di header yang disandikan.
Contoh:
cat docbook-xsl.css | uuencode -m docbook-xsl.css
atau
uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css
uuencode
bukan penyandian sebagaibase64
Untuk beberapa alasan, echo -n <data> | openssl base64
menambahkan baris baru di tengah data base64 saya. Saya berasumsi itu karena data base64 saya sangat panjang.
Menggunakan echo -n <data> | base64
untuk menyandikan dan echo -n <base64-ed data> | base64 -D
mendekode bekerja dengan baik.
Selain jawaban Steve Folly di atas, ketika mengenkripsi dalam mode stdin, untuk menghindari melewati baris baru, tekan CTRL + D dua kali untuk mengakhiri input tanpa ada baris baru tambahan. Output akan ditampilkan tepat setelah baris yang sama.
Sebagai contoh:
$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$
Atau, Anda dapat menggunakan printf
:
$ printf 'input' | openssl base64
aW5wdXQ=
$
Ada Perl plus MIME :: Base64:
perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}'
Ini sudah diinstal sebelumnya. Anda dapat menentukan file terpisah pada baris perintah (atau menyediakan data pada input standar); setiap file dikodekan secara terpisah. Anda juga dapat melakukan:
perl -i.txt -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' file1
Ini mencadangkan file1 ke file1.txt, dan menulis output yang disandikan Base-64 di atas file asli.
Versi NodeJS sederhana:
node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
openssl
(dan sekarang base64
) datang dengan OS.
recode harus melakukan trik untuk Anda
recode ../b64 < file.txt > file.b64
recode tersedia untuk OS X melalui MacPorts .
base64
perintah.
Jika Anda melakukan encoding file font pada base64, Anda dapat melakukan ini:
base64 my-webfont.ttf > my-webfont.b64.ttf.txt
Saya menggunakan ini pada Mac (10.10) sepanjang waktu.
Catatan : Tidak akan ada linebreak.
Kami menyusun daftar perintah shell lintas-platform untuk menyandikan file sebagai base64. Perintah berikut mengambil file input (disebutkan deploy.key
dalam contoh) dan mengubahnya menjadi base64 tanpa pembungkus baris baru. Output base64 dicetak ke terminal melalui 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
Untuk mengarahkan output ke file, tambahkan > base64-encoded.txt
(menggunakan nama file yang Anda pilih).
Perintah-perintah ini di-prototipe sebagai bagian dari permintaan tarikan ini di mana kami ingin perintah shell lintas-platform ke base64 menyandikan kunci pribadi SSH untuk menghapus baris baru.
base64 -d
ataubase64 -D
tergantung pada sistem operasi Anda. Penggunaan OSX-D
.