Jawaban:
openssldapat melakukan ini untuk Anda, dan semuanya diinstal dengan OS X secara default; tidak perlu menginstal darwinports.
$ openssl base64 -in <infile> -out <outfile>
Tanpa -inopsi membaca dari stdin
openssl base64 < path/to/file.png | tr -d '\n' | pbcopyatau cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopyuntuk lewati menulis ke file dan cukup salin output yang disandikan base64 ke clipboard tanpa jeda baris.
-dbendera untuk memecahkan kode.
openssl base64 -e <<< ramdan untuk mendekode:openssl base64 -d <<< cmFtCg==
openssl base64 [-e] -Amelakukannya. + @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 -Aatau 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 <<< ramsebenarnya 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
base64tanpa openssl. Either way, saya perlu menekan Ctrl + D dua kali. Dan berhati-hatilah, @ Garret: di Bash, dengan atau tanpa openssl, openssl base64 <<< superuserdan 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 -nlebih disukai jika Anda tidak memerlukan baris baru. Ini tentu sesuatu yang harus diperhatikan.
printfsebagai penggantiecho -n
Coba gunakan:
base64 -i <in-file> -o <outfile>
Ini harus tersedia secara default pada OS X.
--decodeuntuk 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 <<< stringdan base64 -D <<< stringuntuk menyandikan dan mendekode string dalam terminal, atau base64 -in filedan base64 -D -in fileuntuk menyandikan dan mendekode file.
Invalid characer in input streamketika 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 coreutilsmelalui Brew ( brew install coreutils) yang akan memberikan base64perintah:
$ 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... filenameakan 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
uuencodebukan penyandian sebagaibase64
Untuk beberapa alasan, echo -n <data> | openssl base64menambahkan baris baru di tengah data base64 saya. Saya berasumsi itu karena data base64 saya sangat panjang.
Menggunakan echo -n <data> | base64untuk menyandikan dan echo -n <base64-ed data> | base64 -Dmendekode 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 .
base64perintah.
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.keydalam 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 -dataubase64 -Dtergantung pada sistem operasi Anda. Penggunaan OSX-D.