CLIでもSHA-3チェックサムの計算がしたい!
MD5やSHA-2の場合はmd5sum
やsha256sum
などのチェックサムを計算するコマンドがデフォルトでインストールされますが、SHA-3(Keccak)の場合は似たようなコマンドがデフォルトでインストールされることは少ないと思います。
そこで、この目的に使用できるコマンドについて調べてみました。
OpenSSL/LibreSSL
OpenSSL 1.1.1以降とLibreSSL 3.8.0以降はSHA-3をサポートしています。
openssl dgst
コマンドによってチェックサムを計算でき、-r
オプションを追加することでcoreutilsのフォーマットで出力できます。
SHA-3チェックサムを計算するには-sha3-{224,256,384,512}
オプションを追加します。
$ echo "Hello, world!" > foo.txt
$ openssl dgst -sha3-256 -r foo.txt
ae6802d17c07cbe2b677c46decd5c2c28a4a585fedcb813ad8e7cb1469782773 *foo.txt
RHash
RHashはバージョン1.3.0からSHA-3をサポートしています。
SHA-3チェックサムを計算するには--sha3-{224,256,384,512}
オプションを追加します。
$ echo "Hello, world!" > foo.txt
$ rhash --sha3-256 foo.txt | tee sha3-256sums.txt
ae6802d17c07cbe2b677c46decd5c2c28a4a585fedcb813ad8e7cb1469782773 foo.txt
検証するには-c
オプションを追加します。
$ rhash -c sha3-256sums.txt
--( Verifying sha3-256sums.txt )------------------------------------------------
foo.txt OK
--------------------------------------------------------------------------------
Everything OK
uutils coreutils
uutils coreutilsのhashsum
コマンドはSHA-3をサポートしています。
SHA-3チェックサムを計算するには--sha3-{224,256,384,512}
オプションを追加します。
環境によってはsha3-{224,256,384,512}sum
のコマンド名で実行できるかもしれません。
$ echo "Hello, world!" > foo.txt
$ hashsum --sha3-256 foo.txt | tee sha3-256sums.txt
# または
$ sha3-256sum foo.txt | tee sha3-256sums.txt
ae6802d17c07cbe2b677c46decd5c2c28a4a585fedcb813ad8e7cb1469782773 foo.txt
検証するには-c
オプションを追加します。
$ hashsum --sha3-256 -c sha3-256sums.txt
# または
$ sha3-256sum -c sha3-256sums.txt
foo.txt: OK
オプションはcoreutilsのcksumの共通オプションの多くが実装されているようです。
libkeccak/sha3sum
sha3sumはSHA-3チェックサムを計算するコマンドラインユーティリティで、libkeccakを使用しています。
出力長に合わせてsha3-{224,256,384,512}sum
から目的のコマンドを選んで実行します。
$ echo "Hello, world!" > foo.txt
$ sha3-256sum foo.txt | tee sha3-256sums.txt
ae6802d17c07cbe2b677c46decd5c2c28a4a585fedcb813ad8e7cb1469782773 foo.txt
検証するには-c
オプションを追加します。
$ sha3-256sum -c sha3-256sums.txt
foo.txt: OK
所感
計算だけの場合は多くの環境でデフォルトでインストールされる可能性が高いのでOpenSSLが一番簡単に利用できるように思います。
検証もする場合はインストールのしやすさの点ではRHashで、coreutilsとの互換性重視の場合はuutils coreutilsが良いように思います。
Discussion