Saya tidak sepenuhnya yakin saya mengerti apa yang Anda inginkan, tetapi saya pikir sesuatu seperti berikut ini akan berfungsi:
$ echo -ne "$(echo -n "message" | sha1sum | cut -f1 -d" " | sed -e 's/\(.\{2\}\)/\\x\1/g')" | base64
Pada dasarnya, saya mengambil output hex, gunakan sed
untuk membuatnya menjadi string nilai-nilai hex yang lolos, dan kemudian gunakan echo -en
untuk menggemakan byte menjadi base64
.
Kami dapat mengkonfirmasi bahwa hasil akhir sesuai dengan hash yang sama dengan latihan berikut:
$ 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 .&.}
Inspeksi visual menunjukkan bahwa nilai base64 kami cocok dengan hex asli. Perhatikan bahwa jika Anda menggunakan hexdump
daripada xxd
mungkin Anda harus bermain dengan pengaturan format sedikit untuk mendapatkan output yang Anda harapkan.
echo foo | openssl dgst -binary -sha1 | base64
adalah setara, dan mungkin cara terbersih untuk melakukan ini.