CLIでBase64でエンコードされたshaXを取得する方法は?

CLIでBase64でエンコードされたshaXを取得する方法は?

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最近、sha256OpenBSD(またはsha1、sha512)コマンドにオプションを追加するだけです。

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

または:

$ cksum -q -a sha256b $FILE

関連情報