Cli üzerinde bir base64 kodlu shaX'ı nasıl edinebilirim?


31

sha1sumgerçek sha'ın onaltılı kodlanmış bir formatını verir Bir base64 kodlu değişken görmek istiyorum. Büyük olasılıkla şu şekilde ekleyebileceğim ikili sürümü çıktıran bazı komutlar: şunun gibi: echo -n "message" | <some command> | base64ya da doğrudan çıktılarsa bu da iyidir.

Yanıtlar:


40

OpenSSL'den komut satırı yardımcı programınız varsa, ikili biçimde bir özet üretebilir ve hatta base64'e (ayrı bir çağrıda) bile çevirebilir.

echo -n foo | openssl dgst -binary -sha1 | openssl base64

1
echo foo | openssl dgst -binary -sha1 | base64eşdeğerdir ve muhtemelen bunu yapmanın en temiz yoludur.
xenoterracide

3
opensslBase64 için kullanmak , yalnızca bir araca ( ksh: base64: not found) bağlı olma avantajına sahiptir .
Gilles 'SO- kötülük olmayı bırak'

2
Büyük mesaj özeti karmaları gibi sha512, sonuçta elde edilen dizgiyi birden fazla satıra bölmeyi önlemek -Aiçin son openssl base64komuta seçenek eklemek isteyebilirsiniz .
mykhal

@Gilles Neden echo foo > somefile; cat somefile | openssl dgst -binary -sha1 | openssl base64farklı bir dize üretir?
georgeliatsos

@gliatsos Çünkü echo -n foove echo foofarklı dizgiler üretiyorlar.
Gilles 'SO- kötülük'

15

Yana sha1sumikili çıkış için bir seçenek sağlamaz olasılıkla tersini yapar bir yardımcı program bulmak gerekir odve boru bunları. Fschmitt tarafından xxd'geri' ve 'düz çöplük' bayraklarıyla kullanmak için öneride bulunmak, şöyle görünecektir:

sha1sum | cut -f1 -d\ | xxd -r -p | base64


4
-Xp bayrağıyla xxd kullanın. Bu gibi: sha1sum somefile.txt | kesilmiş -f1 -d \ | xxd -r -p | base64
fschmitt

@fschmitt: Cevabımı göndermeden önce bu yorumu okumam gerekirdi, çok daha temiz. Bir cevap olarak göndermeyi düşünmelisiniz. Buna oy veririm.
Steven D

Daha çok alex cevabı, ben sadece "hex binary unix'i dönüştürmek" googledim, bu yüzden alex, cevabınızı xxd çağrısını içerecek şekilde düzenlemek için çekinmeyin ve bu oyu vereceğiz.
fschmitt

Cevabımı düzenledi. Gösterdiğiniz için teşekkürler xxd:)
alex

müthiş! Bu adımın gerekliliğinden bahsetmeyen httpd.apache.org/docs/2.4/misc/password_encryptions.html belgelerine bakmak zordu
phil294

1

Ne istediğini anladığımdan tam olarak emin değilim, ancak aşağıdaki gibi bir şeyin çalışması gerektiğini düşünüyorum:

$ echo -ne "$(echo -n "message" | sha1sum | cut -f1 -d" " | sed -e 's/\(.\{2\}\)/\\x\1/g')" | base64

Temel olarak, hex çıktısını alıyorum, sedonu kaçan hex değerlerinden oluşan bir dizi yapmak için kullanıyorum ve ardından echo -enbaytları eko etmek için kullanıyorum base64.

Nihai çıktının, aşağıdaki alıştırmayla aynı karmaya tekabül ettiğini onaylayabiliriz:

$ echo -n "message" | sha1sum 
6f9b9af3cd6e8b8a73c2cdced37fe9f59226e27d  -

$ echo -ne "$(echo -n "message" | sha1sum | cut -f1 -d" " | sed -e 's/\(.\{2\}\)/\\x\1/g')" | base64
b5ua881ui4pzws3O03/p9ZIm4n0=

$ echo -n "b5ua881ui4pzws3O03/p9ZIm4n0=" | base64 -d | xxd
0000000: 6f9b 9af3 cd6e 8b8a 73c2 cdce d37f e9f5  o....n..s.......
0000010: 9226 e27d                                .&.}

Görsel inceleme, base64 değerimizin orijinal hex ile eşleştiğini gösteriyor. Beklediğiniz çıktıyı elde etmek için kullanmak hexdumpyerine xxd, format ayarlarıyla biraz oynamak zorunda kalabileceğinizi unutmayın.


1

Perl bir base64 modülüne sahiptir (5.7.1'den beri temel dağılımda).

echo foo | sha1sum | \
perl -MMIME::Base64 -ne '/^([[:xdigit:]]+)/ and print encode_base64(pack("H*",$1))'

Eğer varsa Digest::SHA(5.9.3 beri baz dağılımındaki) modülünü veya daha eski Digest::SHA1modülü, sen perl'de bütün hesaplama yapabilirsiniz. 5.10.1 perl'den itibaren, b64digestbase64 çıkışını doldurmaz; Dolguya ihtiyacınız varsa en kolay yoldur MIME::Base64.

perl -MDigest::SHA -e 'print Digest::SHA->new(1)->addfile(*STDIN)->b64digest'
perl -MMIME::Base64 -MDigest::SHA \
     -le 'print encode_base64(Digest::SHA->new(1)->addfile(*STDIN)->digest)'

perl kullanıyorsak, doğrudan base64'e çıkış yapmamıza izin verecek Digest :: SHA modülünü kullanabiliriz.
xenoterracide

0

Base64 SHA256 karma oldukça standart dosya sağlama toplamı haline kodlanmış OpenBSD Sadece ekleyerek yapılabilir .. geçenlerde -bOpenBSD seçeneği sha256komutu (veya sha1 sha512):

$ FILE=/dev/null
$ sha256 -q -b $FILE
47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=

veya:

$ cksum -q -a sha256b $FILE
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.