2020-03-05 /
@syui
checksum
checksumで2つのファイルの同一性をチェックするツールをgolangで書いてみた
私はファイルのハッシュ値を調べるとか比較するとかをまとめてchecksumと呼んでいます。ただ、この辺の知識は調べたり、詳しかったりするわけではなく、普段なんとなく思ってる、ふわっとした理解に過ぎません。
それを前提に話をすると、webやserverに置かれたファイルというのは、改ざんされている可能性があるため、特にインストール時や実行権限を得られるディレクトリにバイナリを置く際などはファイルの同一性をチェックし、偽装されていないかなどを確認することがよくあります。また、ファイル破損などのチェックにも有効なので、通常は、ファイルをダウンロードする時などに自動チェックされることが多いと思います。ブラウザやダウンローダーもハッシュ値チェックは行っているでしょう。
通常、checksumには、sha1sum
,md5sum
などのコマンドを使います。
で、ファイルを比較するとか、ハッシュ値とファイルを比較するとかになると、普通は、shellscriptを書くことになると思います。
if [ "da39a3ee5e6b4b0d3255bfef95601890afd80709" = "`sha1sum ~/.bashrc |cut -d ' ' -f 1`" ];then
echo ok
fi
#こちらは通常、サーバーからの結果や所定形式のテキストをダウンロードしてのチェックになります、つまりパイプ前を変更する必要
sha1sum ~/.zshrc ~/.bashrc |sha1sum -c --quiet
しかし、今回はワンバイナリで使えるchecksumツールをgolangで作ってみました。
$ go get github.com/syui/shasumgo
$ shasumgo ~/.bashrc ~/.bashrc
ok
$ shasumgo s da39a3ee5e6b4b0d3255bfef95601890afd80709 ~/.bashrc
ok
こんな感じで使えます。
また、shellscriptにも使いやすいようコマンド成功時の出力をなしにするオプションもつけました。成功すると出力なし。失敗するとハッシュ値が出力されます。
$ shasumgo c ~/.bashrc ~/.bashrc
$ shasumgo s c da39a3ee5e6b4b0d3255bfef95601890afd80709 ~/.bashrc
最近、gh-actionsを使っていると、やっぱり、go-binaryは使いやすいなーと思ったので。
もしworkflowを書くときchecksumが必要ならgo get github.com/syui/shasumgo
してshasumgo
コマンドで処理を書くのも便利そうと思ったりしてます。
if [ -z "`shasumgo s c da39a3ee5e6b4b0d3255bfef95601890afd80709 ~/.bashrc`" ];then
echo ok
fi
今日は、ゲーム(小説)の続き書こうと思ってたんだけど、なぜかこれ作ってた。