Operations Lab.

PowerShell でファイルのハッシュ値を計算する

with one comment

Windows には md5sum や sha1sum といったコマンドが標準では用意されていません。では、MD5 や SHA1 ハッシュを計算することができないかというと、そんな事はありません。PowerShell  を使用すれば割と簡単にハッシュ値を得ることができます。

PowerShell のコマンドレットを使用して MD5 や SHA1 ハッシュを直接計算することはできませんが、.NET Framework のクラスにはハッシュ値を計算できるクラスがありますので、それを使います。具体的には、System.Security.Cryptography 名前空間の MD5 クラスや SHA1 クラスを使用します。

対象となるハッシュアルゴリズムのインスタンスを作成し、ComputeHash メソッドへファイルストリームを渡せばハッシュ値を計算できます。以下のスクリプトは $file に指定したファイルの SHA1 ハッシュ値を計算、表示します。

$file = "C:\Users\Administrator\Downloads\9200.16384.WIN8_RTM.120725-1247_X64FRE_SERVER_EVAL_JA-JP-HRM_SSS_X64FREE_JA-JP_DV5.ISO"
$sha1 = [System.Security.Cryptography.SHA1]::Create()
$stream = New-Object IO.StreamReader $file
$hash = $sha1.ComputeHash($stream.BaseStream)
$stream.Close()
$hs = ""
$hash | %{ $hs += $_.ToString("x2") }
$hs

# <表示例>
# 722a306ac458ec7bdda19706977b749f2c49ebc6

ここでは、Administrator のダウンロードフォルダに保存した、Windows Server 2012 の体験版(ISO ファイル)の SHA1 ハッシュ値を計算しています。

ハッシュアルゴリズムのインスタンスは、Create メソッドで生成します。(Create は Static メソッドです。)ComputeHash メソッドはバイト配列か Stream からハッシュ値を計算します。今回はファイルストリームとして System.IO 名前空間の StreamReader クラスのインスタンスを作成し、それを ComputeHash へ渡しています。

ComputeHash で計算されたハッシュ値($hash)はバイト配列(byte[])を返します。配列の各要素を16進数へ変換し結合することで、ファイルのハッシュ値(ハッシュ文字列)を得ることができます。

日常的に使用するのであれば専用のアプリケーションを導入したほうが効率的ですが、ちょっとハッシュ値を確認したいときや追加でアプリケーションをインストールしたくないときには便利です。

広告

Written by kazu

2013/02/18 @ 01:25

カテゴリー: PowerShell

Tagged with ,

コメント / トラックバック1件

Subscribe to comments with RSS.

  1. […] PowerShell でファイルのハッシュ値を計算する […]


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。