ハッシュ値計算

Windows 7で何気なくハッシュ値を計算しようとして…詰まった。未だに標準のコマンドには存在しないのか?

一瞬くじけかけたが、Windows 7ではPowershellが標準装備であることを思い出した。

検索すると、System.Security.Cryptography.MD5MD5を計算するクラスであるらしい


実際に計算するのには結構苦労した。というか、PowerShellのヘルプって引いても意味が分からないことが多い。CryptographyについてのhelpにはMD5のことが出てこないし。




ちなみにコマンドプロンプトによる直接実行。

$md5 = [Security.Cryptography.MD5]::Create();

変数md5MD5を計算するためのインスタンスをセット。

$file = New-Object IO.StreamReader "(file path)";

で計算の対象を用意。


実際の計算は

$md5.ComputeHash($file.BaseStream);

で行う*1が、結果が十進数で出てきてしまう…

このあたりをみると、それを更に16進に変換していた。

[System.BitConverter]::ToString($md5.ComputeHash($file.BaseStream));


ちなみに、計算を再度行うと間違った値が出てくる。おそらく、一度読み込む度にStreamReaderの読み込みポイントをファイル先頭にリセットする必要があるんだろう。

資料が見つからないのは、PowerShellじゃなく.Netの資料を当たればいい*2んだろうな。

*1:NTFSなので、一つのファイルには複数のストリームが存在し得る。普段は忘れているが。

*2:これらのクラスは.Netのもの