sha1sum
実際のshaを16進符号化で出力します。 Base64でエンコードされたバリエーションを見たいです。次のようにパイプできるバイナリバージョンを出力するコマンドがあります。echo -n "message" | <some command> | base64
または直接出力しても大丈夫です。
答え1
コマンドラインユーティリティがある場合OpenSSL、バイナリ形式でダイジェストを生成することも、base64に変換することもできます(別の呼び出しで)。
printf %s foo | openssl dgst -binary -sha1 | openssl base64 -A
-sha256
なども-sha512
サポートされます。
答え2
バイナリ出力オプションは提供されていないため、sha1sum
逆の機能を実行するユーティリティを見つけてod
パイプする必要があるかもしれません。 fschmittの提案に従って、「reverse」および「plain dump」フラグと一緒に使用すると、xxd
次のようになります。
sha1sum | cut -f1 -d\ | xxd -r -p | base64
答え3
私はあなたが望むものを完全に理解していませんが、次のようなことがうまくいくと思います。
$ echo -ne "$(echo -n "message" | sha1sum | cut -f1 -d" " | sed -e 's/\(.\{2\}\)/\\x\1/g')" | base64
デフォルトでは、16進出力を取得し、sed
それを使用してエスケープされた16進値の文字列にし、そのecho -en
バイトをbase64
。
次の演習を実行して、最終出力が同じハッシュ値に対応することを確認できます。
$ 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 .&.}
目視検査により、base64値が元の16進数と一致することがわかりました。hexdump
代わりに使用する場合は、xxd
目的の出力を得るためにフォーマットを少し調整する必要があります。
答え4
Base64でエンコードされたSHA256ハッシュは、かなり標準的なファイルチェックサムになります。オープンBSD-b
最近、sha256
OpenBSD(またはsha1、sha512)コマンドにオプションを追加するだけです。
$ FILE=/dev/null
$ sha256 -q -b $FILE
47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
または:
$ cksum -q -a sha256b $FILE