PowerShell で MD5 チェックサムを取得する方法

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

データの整合性とセキュリティを 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>]: 使用するハッシュアルゴリズム(例:MD5SHA1)を指定します。

  • [Options]: カスタマイズやエラーハンドリングのための追加設定(-Path-LiteralPath-Force など)です。

以下に例を示します:

Get-FileHash -Path "path\example.txt" -Algorithm MD5

このコードでは、Get-FileHash コマンドレットを使用して、"C:\Path\To\File.txt"にあるファイルの MD5 チェックサムを計算します。コマンドレットは指定されたファイルの MD5 ハッシュ値を自動的に計算します。

出力:

PowerShell で MD5 チェックサムを取得する - 出力 1

-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 チェックサムを計算します。

出力:

PowerShell で MD5 チェックサムを取得する - 出力 2

この記事の最初のセクションと比較して、唯一の変更点は -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 で MD5 チェックサムを取得する - 出力 3

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 チェックサムを取得する - 出力 4

結論

PowerShell は、さまざまなシナリオと複雑さのレベルに適した MD5 チェックサムを計算するための複数の手段を提供します。Get-FileHash のような組み込みのコマンドレットを使用する場合でも、System.Security.Cryptography.MD5 のような.NET クラスの力を活用する場合でも、MD5CryptoServiceProvider のような暗号プロバイダを利用する場合でも、PowerShell ユーザーはデータの整合性とセキュリティを確保するための多様なツールを利用できます。

これらの方法を効果的に理解し利用することで、PowerShell スクリプトは MD5 チェックサムを必要とするタスクを自信を持って扱い、精度と信頼性を持って処理することができます。

チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn