PowerShell で MD5 チェックサムを取得する方法
- PowerShell での MD5 ハッシュアルゴリズムの使用
-
PowerShell での
[System.Security.Cryptography.MD5]
クラスの使用 -
PowerShell での
MD5CryptoServiceProvider
クラスの使用 - 結論

データの整合性とセキュリティを PowerShell で確保する際、MD5 ハッシュアルゴリズムはセキュリティの観点ではその重要性が薄れつつあるものの、依然として価値のあるツールです。脆弱性があるため暗号目的には推奨されませんが、MD5 はファイル転送の検証や改ざんの検出に有用です。
PowerShell の機能を活用して、MD5 チェックサムを計算するさまざまな方法を探り、基本的なアプローチと高度なアプローチの両方について洞察を提供します。
PowerShell での MD5 ハッシュアルゴリズムの使用
MD5 はセキュリティのためには推奨されていませんが、ファイル転送が改ざんされたか成功したかを確認するための優れた手段です。
まず、転送前と転送後のファイルの MD5 フィンガープリントを取得します。
同じ値が得られた場合、ファイル転送は改ざんされていません。そうでなければ、ファイルは破損しています。
これを実行するために、Get-FileHash
コマンドレットを使用します。Get-FileHash
コマンドレットは、ファイルのハッシュ値を表示します。
デフォルトでは SHA256
アルゴリズムを使用しますが、追加のパラメータを加えることで MD5
を使用することができます。
Get-FileHash [-Path] <file> [[-Algorithm] <algo>] [Options]
-Algorithm
: 使用するハッシュアルゴリズムを指定します。この場合、MD5
を使用します。-Path
: ハッシュ値を計算したいファイルのパスを指定します。
ファイルパスの代わりにストリームで使用することもできます。
Get-FileHash [-InputStream] <stream> [[-Algorithm] <algo>] [Options]
-
[-InputStream] <stream>
: ハッシュ計算の入力ストリームを指定し、デフォルトでは-Path
で指定されたファイルになります。 -
[[-Algorithm] <algo>]
: 使用するハッシュアルゴリズム(例:MD5
、SHA1
)を指定します。 -
[Options]
: カスタマイズやエラーハンドリングのための追加設定(-Path
、-LiteralPath
、-Force
など)です。
以下に例を示します:
Get-FileHash -Path "path\example.txt" -Algorithm MD5
このコードでは、Get-FileHash
コマンドレットを使用して、"C:\Path\To\File.txt"
にあるファイルの MD5 チェックサムを計算します。コマンドレットは指定されたファイルの MD5 ハッシュ値を自動的に計算します。
出力:
-Path
引数は必須ではないため、使用する必要はありません。代わりにファイルパスを指定し、SHA256
の代わりに MD5
を使用するためのアルゴリズムパラメータを追加します。
PowerShell をスクリプトで使用することで、結果を持つ変数を作成し、ハッシュプロパティを用いてハッシュ値を取得できます。たとえば、$variable.Hash
を用いて元のファイルと同じ値であることを確認できます。
PowerShell での文字列のハッシュ化
残念ながら、PowerShell で文字列からハッシュを生成するための直接的な関数やネイティブコマンドは存在しません。
ただし、Get-FileHash
をストリームパラメータと共に使用することで、文字列のハッシュを計算する解決策となります。
以下のスニペットから直接始めましょう:
$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.write("MD5Online")
$writer.Flush()
$stringAsStream.Position = 0
Get-FileHash -InputStream $stringAsStream -Algorithm MD5
このコードスニペットでは、MemoryStream
オブジェクト $stringAsStream
を作成し、ストリームに文字列 MD5Online
を書くために StreamWriter $writer
を初期化します。次に、データがストリームに書き込まれることを確認するためにライターをフラッシュします。
ストリームの位置を先頭に戻した後、Get-FileHash
コマンドレットを -InputStream
パラメータを $stringAsStream
に、-Algorithm
パラメータを MD5
に設定して利用します。このコマンドは提供された文字列の MD5
チェックサムを計算します。
出力:
この記事の最初のセクションと比較して、唯一の変更点は -Path
の代わりに -InputStream
を使用したことです。
出力を見ると、文字列の MD5
ハッシュが結果として得られます。
PowerShell での [System.Security.Cryptography.MD5]
クラスの使用
[System.Security.Cryptography.MD5]
クラスは、データの MD5 ハッシュ値を計算する機能を提供します。このクラスは.NET Framework の Cryptography 名前空間の一部であり、PowerShell スクリプトで MD5 チェックサムを生成するための堅牢で効率的な解決策を提供します。
[System.Security.Cryptography.MD5]
クラスは、MD5 ハッシュ値を計算するための ComputeHash()
メソッドを提供します。構文は次のとおりです:
$md5 = [System.Security.Cryptography.MD5]::Create()
$hash = $md5.ComputeHash($data)
$md5
:Create()
メソッドを使用して作成された MD5 クラスのインスタンスを表します。$hash
: 計算された MD5 ハッシュ値を保存します。$data
: MD5 チェックサムを計算したいデータを指定します。これはファイル内容を表すバイト配列または文字列になります。
以下に例を示します:
$data = [System.Text.Encoding]::UTF8.GetBytes("MD5Example")
$md5 = [System.Security.Cryptography.MD5]::Create()
$hash = $md5.ComputeHash($data)
$hashString = [System.BitConverter]::ToString($hash) -replace '-', ''
Write-Output $hashString
このコードスニペットでは、文字列 MD5Example
を [System.Text.Encoding]::UTF8.GetBytes()
を用いてバイト配列に変換します。次に、[System.Security.Cryptography.MD5]::Create()
を使用して MD5 クラスのインスタンスを作成し、ComputeHash()
メソッドを呼び出して提供されたデータの MD5 ハッシュ値を生成します。
最後に、ハッシュ値を文字列形式に変換し、[System.BitConverter]::ToString()
を使用して出力のダッシュを削除します。
出力:
PowerShell での MD5CryptoServiceProvider
クラスの使用
MD5CryptoServiceProvider
クラスは.NET Framework の Cryptography 名前空間の一部です。このクラスは、MD5 暗号アルゴリズムを使用してデータの MD5 ハッシュ値を計算する機能を提供します。
MD5CryptoServiceProvider
クラスは、MD5 ハッシュ値を計算するための ComputeHash()
メソッドを提供します。構文は次のとおりです:
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = $md5.ComputeHash($data)
$md5
:New-Object
を使用して作成されたMD5CryptoServiceProvider
クラスのインスタンスを表します。$hash
: 計算された MD5 ハッシュ値を保存します。$data
: MD5 チェックサムを計算したいデータを指定します。これはファイル内容を表すバイト配列または文字列になります。
以下に例を示します:
$data = [System.Text.Encoding]::UTF8.GetBytes("MD5Example")
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = $md5.ComputeHash($data)
$hashString = [System.BitConverter]::ToString($hash) -replace '-', ''
Write-Output $hashString
このコードスニペットでは、文字列 MD5Example
を [System.Text.Encoding]::UTF8.GetBytes()
を用いてバイト配列に変換します。次に、New-Object
を使用して MD5CryptoServiceProvider
クラスのインスタンスを作成し、ComputeHash()
メソッドを呼び出して提供されたデータの MD5 ハッシュ値を生成します。
最後に、ハッシュ値を文字列形式に変換し、[System.BitConverter]::ToString()
を使用して出力のダッシュを削除します。
出力:
結論
PowerShell は、さまざまなシナリオと複雑さのレベルに適した MD5 チェックサムを計算するための複数の手段を提供します。Get-FileHash
のような組み込みのコマンドレットを使用する場合でも、System.Security.Cryptography.MD5
のような.NET クラスの力を活用する場合でも、MD5CryptoServiceProvider
のような暗号プロバイダを利用する場合でも、PowerShell ユーザーはデータの整合性とセキュリティを確保するための多様なツールを利用できます。
これらの方法を効果的に理解し利用することで、PowerShell スクリプトは MD5 チェックサムを必要とするタスクを自信を持って扱い、精度と信頼性を持って処理することができます。
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn