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, sed
onu kaçan hex değerlerinden oluşan bir dizi yapmak için kullanıyorum ve ardından echo -en
baytları 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 hexdump
yerine xxd
, format ayarlarıyla biraz oynamak zorunda kalabileceğinizi unutmayın.
echo foo | openssl dgst -binary -sha1 | base64
eşdeğerdir ve muhtemelen bunu yapmanın en temiz yoludur.