Mac OS X'te base64'ün bir dosya veya stdin kodlayacağı bir terminal komutu var mı?
openssl
çözme bayrağıyla birlikte kullanılması durumunda -d
OS X'de (10.10 Yosemite).
Mac OS X'te base64'ün bir dosya veya stdin kodlayacağı bir terminal komutu var mı?
openssl
çözme bayrağıyla birlikte kullanılması durumunda -d
OS X'de (10.10 Yosemite).
Yanıtlar:
openssl
bunu sizin için yapabilir ve hepsi varsayılan olarak OS X ile birlikte kurulur; darwinport yüklemeye gerek yok.
$ openssl base64 -in <infile> -out <outfile>
-in
Seçenek olmadan stdin'den okur
openssl base64 < path/to/file.png | tr -d '\n' | pbcopy
veya kullanın cat path/to/file.png | openssl base64 | tr -d '\n' | pbcopy
.
-d
kodunu çözmek için bir bayrak kullanın.
openssl base64 -e <<< ram
ve kod çözülür:openssl base64 -d <<< cmFtCg==
openssl base64 [-e] -A
bunu yapın. + @kenny, girişin, az önce belirttiğim Newlines olayı dahil olmak üzere en fazla her 76 karakterde bir newline içermemesi durumunda, ihtiyacınız olur -d -A
veya hata mesajı vermeden eksik veya bozuk veriler alırsınız (bekleyen bir hata raporu olmasına rağmen). bunun düzeltilmesine neden olabilir).
openssl base64 -e <<< ram
gerçekte izleyen satır beslemesi de dahil olmak üzere 4 baytı kodlar; bkz hexdump <<< ram
.
Openssl daha kısaca kullanılabilir:
echo -n 'input' | openssl base64
[echo -n -> kullanılmalıdır, yoksa yeni satır karakterini içeren kodlama yapılır]
veya
openssl base64 <ENTER> [type input] <CTRL+D>
openssl base64 <<< input
base64
olmadan openssl
. Her iki durumda da, Ctrl + D tuşlarına iki kez basmam gerekiyor. Dikkat edin, @Garret: Bash'te, olsun ya da olmasın openssl
, openssl base64 <<< superuser
ve "burada dize" olarak openssl base64 <<< "superuser"
yanlış verim c3VwZXJ1c2VyCg==
, sonra hala bir satır beslemesi içerir! ( Görünüşe göre sadece Bash'de değil, aynı zamanda zsh, ksh ve yash da. Bakın hexdump <<< superuser
. Base64 sonucu şöyle olmalı c3VwZXJ1c2Vy
.)
echo -n
Yeni hatta ihtiyacınız yoksa tercih edilir. Bu kesinlikle dikkat edilmesi gereken bir şey.
printf
Yerine kullanabilirsinizecho -n
Kullanmayı deneyin:
base64 -i <in-file> -o <outfile>
OS X'te varsayılan olarak bulunmalıdır.
--decode
İşlemi base64'ten normale döndürmek için ekleyin .
openssl base64
. Teşekkürler!
base64
OS X 10.9.4'te varsayılan olarak komut mevcuttur.
Sen kullanabilirsiniz base64 <<< string
ve base64 -D <<< string
kodlamak ve terminalde bir dize şifresini çözmek, ya da base64 -in file
ve base64 -D -in file
kodlamak ve bir dosya şifresini çözmek.
Invalid characer in input stream
kullanırken <<<
... beraber çalıştık "
, '
ve dize etrafında hiçbir şey.
Python varsayılan olarak OS X ile donatıldığından, aşağıdaki gibi kullanabilirsiniz:
$ echo FOO | python -m base64
Rk9PCg==
$ echo Rk9PCg== | python -m base64 -d
FOO
Veya yüklemek coreutils
yoluyla Brew ( brew install coreutils
sağlayacak olan) base64
komutu:
$ echo FOO | base64
Rk9PCg==
$ echo Rk9PCg== | base64 -d
FOO
Hız açısından, openssl ve ardından perl, ardından uuencode kullanacaktım. Taşınabilirlik açısından, uuencode ve ardından Perl, ardından openssl kullanacağım (Kodu mümkün olduğunca UNIX benzeri hisse senedi platformlarında kullanabilmek için). Ancak, tüm UNIX değişkenlerinin -m anahtarını desteklemediğinden dikkatli olun (iirc AIX yapar, HP / UX yapar, Solaris yok).
$ 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
Tarafından belirtildiği şekilde base64 başına file_in.txt uuencode -m kullanın RFC1521 ve (deşifre varsayılan dosya adı olarak filename_when_uudecoded.txt birlikte) o filename.b64 yazabilirsiniz:
uuencode -m -o filename.b64 file_in.txt filename_when_uudecoded.txt
STDIN örneği:
cat file_in.txt | uuencode -m -o filename.b64 filename_when_uudecoded.txt
Python bugünlerde tüm mac'lara önceden yüklenmiş olarak geliyor.
Terminalde python
(veya ipython ) çalıştırın .
Bir dosyayı kodla:
base64data = open('myfile.jpg','rb').read().encode('base64')
open('myfile.txt','w').write(base64data)
Bir dosyanın kodunu çözün:
data = open('myfile.txt').read().decode('base64')
open('myfile.jpg','wb').write(data)
Tabii ki, her iki işlem bir oneliner'a dönüştürülebilir, ancak bu şekilde daha okunur.
## 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
/ Atlandığında -output... filename
stdout'a yazdırılır.
Hem OSX hem de Ubuntu'da bulunan başka bir ootb yardımcı programı:
## 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
Kod adı verilen başlıkta görüntülenecek ad.
Örnek:
cat docbook-xsl.css | uuencode -m docbook-xsl.css
veya
uuencode -m -o docbook-xsl.css.b64 docbook-xsl.css docbook-xsl.css
uuencode
kodlama olarak değilbase64
Nedense, echo -n <data> | openssl base64
base64 verilerimin ortasına yeni bir satır ekledim. Base64 verilerimin gerçekten uzun olduğu için olduğunu sanıyorum.
Kullanılması echo -n <data> | base64
kodlamak ve echo -n <base64-ed data> | base64 -D
işlenmiş cezası çözmek için.
Steve Folly'nin yukarıdaki cevabına ek olarak, stdin modunda şifreleme yaparken, fazladan yeni satırları geçmekten kaçınmak için, girişi yeni satırlar olmadan sonlandırmak için CTRL + D tuşlarına iki kez basın. Çıktı, aynı satırdan hemen sonra gösterilecektir.
Örneğin:
$ openssl base64 [Enter]
input<CTRL+D><CTRL+D>aW5wdXQ=
$
Alternatif olarak, kullanabilirsiniz printf
:
$ printf 'input' | openssl base64
aW5wdXQ=
$
Perl artı MIME var :: Base64:
perl -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}'
Bu önceden yüklenmiş olarak geliyor. Komut satırında ayrı dosyalar belirleyebilirsiniz (veya standart girişte verileri sağlayın); Her dosya ayrı ayrı kodlanır. Ayrıca şunları da yapabilirsiniz:
perl -i.txt -MMIME::Base64 -e 'undef $/;while(<>){print encode_base64($_);}' file1
Bu, file1 dosyasını file1.txt dosyasına yedekler ve Base-64 ile kodlanmış çıktıyı orijinal dosyanın üzerine yazar.
Basit bir NodeJS sürümü:
node -e "process.stdout.write(new Buffer(process.argv[1]).toString('base64'))" "Hello world!"
openssl
(ve şimdi base64
) daha iyi bir cevap olduğunu sanmıyorum .
recode sizin için hile yapmalı
recode ../b64 < file.txt > file.b64
MacPorts aracılığıyla OS X için recode kullanılabilir .
base64
komut.
Bir font dosyasını kodlayan base64 iseniz, bunu yapabilirsiniz:
base64 my-webfont.ttf > my-webfont.b64.ttf.txt
Bunu her zaman Mac'te (10.10) kullanırım.
Not : Çizgi yok.
Bir dosyayı base64 olarak kodlamak için platformlar arası kabuk komutlarının bir listesini derledik. Aşağıdaki komutlar bir giriş dosyasını alır ( deploy.key
örneklerde adlandırılır ) ve herhangi bir yeni satır kaydırma yapmadan base64'e dönüştürür. Base64 çıkışı stdout üzerinden terminale yazdırılır.
# 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
Çıktıyı bir dosyaya yönlendirmek için ekleyin > base64-encoded.txt
(seçtiğiniz bir dosya adını kullanarak).
Bu komutlar bu çekme isteğinin bir parçası olarak prototip edildi, burada platformlar arası kabuk komutlarının base64 olarak tanımlanmasını istedik.
base64 -d
dabase64 -D
işletim sisteminize bağlı olduğunu unutmayın. OSX kullanır-D
.