このエントリーをはてなブックマークに追加


PowerShellでHMAC-SHA256, HMAC-SHA512を使用する方法

PowerShellでHMAC-SHA256, HMAC-SHA512を使用するサンプルを以下に記します。
例えば、仮想通貨取引所のZaif のプライベートAPIなどの署名に使用されています。


関連資料

HMAC-SHAの使用例の説明

以下の例は、HMAC-SHA512のサンプルになります。
下記の例では、HMAC-SHA512のオブジェクトを作成しています。

$oHMACSHA512 = New-Object System.Security.Cryptography.HMACSHA512

HMAC-SHA256を使用したい場合は、以下のように512を256に変更するだけで対応できます。

$oHMACSHA256 = New-Object System.Security.Cryptography.HMACSHA256

以下、HMAC-SHA512で署名したサンプルとなります。

  1. 署名用のシークレットキーを設定します。(サンプルなのえ値は適当です。)
    $SECRET_KEY = "456"
  2. New-Objectコマンドレットを使い、HMAC-SHA512オブジェクトを作成します。
    $oHMACSHA512 = New-Object System.Security.Cryptography.HMACSHA512
  3. 作成したHMAC-SHA512オブジェクトにシークレットキーを設定します。
    $oHMACSHA512.key = [Text.Encoding]::ASCII.GetBytes($SECRET_KEY)
  4. ハッシュかするメッセージを設定します。(サンプルなので値は適当です。)
    $MESSAGE = "789"
  5. 署名されたデータを取得します。
    $signature_rawout = $oHMACSHA512.ComputeHash([Text.Encoding]::ASCII.GetBytes($MESSAGE))
    上記で取得した情報はByte値の配列となります。
  6. 仮想通貨取引所 Zaif では、上記で取得した情報を16進を文字列で渡すように指定されています。
    このような場合は、以下の構文で取得したByte[]を16進値の文字列で表示することができます。
    $signature = ""
    $signature_rawout | % { $i = [Convert]::ToString($_,16); if ($i.length -eq 1) { $i ='0' + $i }; $signature += $i }
  7. 16進値の文字列が格納されています。
    $signature
    dc247cecbb2100248bb44f5c935c694e502accf1d397b51f238c18bfe823bd6c5bd948eec004eac42e19ea9dd3f1751006edd60a3437c282785170b235db6ecc
  8. BASE64にしたい場合は以下のようにすればよいでしょう。
    $signatureB64 = [Convert]::ToBase64String($signature_rawout)
    $signatureB64
    3CR87LshACSLtE9ck1xpTlAqzPHTl7UfI4wYv+gjvWxb2UjuwATqxC4Z6p3T8XUQBu3WCjQ3woJ4UXCyNdtuzA==

HMAC-SHA512使用時の出力例

上記の例を実際にPowerShellコンソール上で動かしてみた出力です。

PS C:\> $SECRET_KEY = "456"
PS C:\> $oHMACSHA512 = New-Object System.Security.Cryptography.HMACSHA512
PS C:\> $oHMACSHA512.key = [Text.Encoding]::ASCII.GetBytes($SECRET_KEY)
PS C:\> $MESSAGE = "789"
PS C:\> $signature_rawout = $oHMACSHA512.ComputeHash([Text.Encoding]::ASCII.GetBytes($MESSAGE))
PS C:\> $signature = ""
PS C:\> $signature_rawout | % { $i = [Convert]::ToString($_,16); if ($i.length -eq 1) { $i ='0' + $i }; $signature += $i }
PS C:\> $signature
dc247cecbb2100248bb44f5c935c694e502accf1d397b51f238c18bfe823bd6c5bd948eec004eac42e19ea9dd3f1751006edd60a3437c282785170b235db6ecc
PS C:\> $signatureB64 = [Convert]::ToBase64String($signature_rawout)
PS C:\> $signatureB64
3CR87LshACSLtE9ck1xpTlAqzPHTl7UfI4wYv+gjvWxb2UjuwATqxC4Z6p3T8XUQBu3WCjQ3woJ4UXCyNdtuzA==
PS C:\>

以上、PowerShellでHMAC-SHAを使用する方法でした。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-05 (日) 15:16:24