WindowsとLinuxにて再帰的にSHA256でハッシュ値を算出してみる
今回は少し毛色を変えて、SHA256でハッシュ値を求めたいと思います。
- ■SHA256とは?
- ■LinuxにてSHA256でハッシュ値を求めてみる
- ■WindowsにてSHA256でハッシュ値を求めてみる
- ■フォルダ内ファイルに対して再帰的にハッシュ値を算出する
- ■Windowsでの注意点
- ■最後に
- ■参考
■SHA256とは?
SHA256とは、任意の長さの原文から固定長の特徴的な値を算出するハッシュ関数の1つです。
どんな長さの原文からも256bitのハッシュ値を算出することが出来る。
下記に詳しくまとまっておりますので詳細はこちらでご確認ください。
https://wa3.i-3-i.info/word15997.html
■LinuxにてSHA256でハッシュ値を求めてみる
ではまずはLinux、WindowsでどのようにSHA256でハッシュ値を求めるのかをまとめます。
と言っても下記コマンドで求めることが可能です!!
sha256sum ファイル名
例えば、test.txtというファイルを作成し、
sha256sum test.txt
と実行すると、
84ced9d1657fbe5989b3e5ad77053f6d62eb478460a2cfb7acf5e39d90650322 test.txt
といった結果が得られます。
さらに、-cオプションを付与することによりハッシュ値比較も行えます。
例えば、
sha256sum test.txt > hoge.txt
sha256sum -c hoge.txt
と実行すると、
test.txt: 完了
と出力されるかと思います。
"完了"が返ってくると成功、
"失敗"が返ってくるとハッシュ値比較結果NG、
となります。
ですので、sha256sumでハッシュ値を取得した後、test.txtを編集し、
sha256sum -c hoge.txt
を実行すると、
test.txt: 失敗 sha256sum: 警告: 1 個の計算したチェックサムが一致しませんでした
といったメッセージが出力されます。
■WindowsにてSHA256でハッシュ値を求めてみる
では次にWindowsでSHA256ハッシュ値を求めてみます。
Windowsではこちらのコマンドになります。
CertUtil -hashfile ファイル名 SHA256
こちらもLinuxと同様にtest.txtで確認してみます。
CertUtil -hashfile test.txt SHA256
を実行すると、
SHA256 ハッシュ (対象 test.txt): d0f652050ec013d2ca787a8dc8a9c785982839370e6b1e644744dcd51fe2ab7f CertUtil: -hashfile コマンドは正常に完了しました。
のように、ハッシュ値が返ってくるかと思います。
■フォルダ内ファイルに対して再帰的にハッシュ値を算出する
Linux、Windows共にはSHA256でハッシュ値算出できるのですが、
1つ困ったことがあります。
それは、ファイル名を指定しないとハッシュ値を求めてくれない所です。
例えば、hugaフォルダを作成し、その配下にhuga2フォルダを作成し、huga2フォルダにtest.txtを移動させた場合、
要するに、
huga/huga2/test.txt
の構成に対して、
sha256sum huga/*
を実行しても、
sha256sum: huga/huga2: ディレクトリです
と出力されてしまいます。
これは、Windowsにも同様に発生します。
このため、
フォルダ内のファイル・フォルダに対して再帰的に処理を実行することが必要になる。
ということです。
Linux、Windowsのそれぞれで再帰的にSHA256を処理するためのコマンドはこちらになります。
【Linux】
find huga -type f -exec sha256sum -b {} \;
【Windows】
cd huga for /r %i in (*) do (CertUtil -hashfile "%i" SHA256)
こちらを実行するとそれぞれ、
【Linux】
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 *huga/huga2/test.txt
【Windows】
17e682f060b5f8e47ea04c5c4855908b0a5ad612022260fe50e11ecb0cc0ab76 CertUtil: -hashfile コマンドは正常に完了しました。
尚、SHA256のハッシュ値算出結果をテキストに書き込むには、
【Linux】
find huga -type f -exec sha256sum -b {} \; > hoge.txt
【Windows】
cd huga for /r %i in (*) do (CertUtil -hashfile "%i") >> hoge.txt
とすればOKです。
また、LinuxでのSHA256のハッシュ値比較ですが、今回のケースでも、
sha256sum -c hoge.txt
とすればOKです。
■Windowsでの注意点
CertUtil -hashfile ファイル名 SHA256
ですが、空ファイル(新規作成しただけ)に対して実行すると、
CertUtil: ファイルを格納しているボリュームが外部的に変更されたため、開かれているファイルが無効になりました。
といったエラーが返ってきてしまいます。