#author("2018-08-05T15:16:24+09:00","","")
#navi(../)
* PowerShellでHMAC-SHA256, HMAC-SHA512を使用する方法 [#w18a33ef]
PowerShellでHMAC-SHA256, HMAC-SHA512を使用するサンプルを以下に記します。~
例えば、仮想通貨取引所の&htmlinsert(zaif_link.html);のプライベートAPIなどの署名に使用されています。~

#contents
#htmlinsertpcsp(win-top.html,win-sp.html)

* 関連資料 [#da18b0c9]
-PowerShellで仮想通貨取引所のAPIにアクセスするサンプルを公開しています。~
[[仮想通貨取引所のAPIを使ってみる>http://cryptocurrency.just4fun.biz/?API]]

* HMAC-SHAの使用例の説明 [#ab6e5e8b]
以下の例は、HMAC-SHA512のサンプルになります。~
下記の例では、HMAC-SHA512のオブジェクトを作成しています。~
 $oHMACSHA512 = New-Object System.Security.Cryptography.HMACSHA512
HMAC-SHA256を使用したい場合は、以下のように512を256に変更するだけで対応できます。
 $oHMACSHA256 = New-Object System.Security.Cryptography.HMACSHA256

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

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

* HMAC-SHA512使用時の出力例 [#b05ca1de]
上記の例を実際に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を使用する方法でした。

#htmlinsertpcsp(win-btm.html,win-sp.html)


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS