VBA HmacSha関連

VBAネタです。

HMACSHAをExcel VBAで取得する。

なんでそんなもんが必要なのか?
それは置いておいて...。

いろいろインターネットを調べました。
・日本語以外に、英語、ロシア語まで出てきました。
・標準モジュールをインポートして、これをたたく方法なんかもありました。
 →そもそもおかしい結果を戻すものだったり〜
 →微妙に表面化しなさそうなバグを含んでいたり〜

HMACSHA256が動くコードはいくらでも見つかりました。
 →Amazonを利用するときに必要らしい。
でも僕はどうしてもHMACSHA512が必要なんです。

こういう時は本家マイクロソフトの開発者サイトを参照
https://msdn.microsoft.com/ja-jp/library/system.security.cryptography.hmac
そしてこのクラス群はVBAから呼べるようになっているらしい。

ならば以下のようなことはやめよう。単純に格好悪いから△
・自分でいろいろ作ったり〜
・野良コードを使ったり〜

やっぱり格好良く本家マイクロソフト様のライブラリをたたきたい!!!
 →Microsoft Updateでバグ対応してくれるし〜

そんなことで放課後を活用して試行錯誤1週間かかりました。ちょっと自信があります。
 →参照設定とか不要です〜
 →野良標準モジュールとか不要です〜
 →答え合わせも大体しました〜
https://en.wikipedia.org/wiki/HMAC#Examples

とりあえず〜
これがなかなか無くて苦労したので〜
HMACSHAの入力と出力例をどうぞ〜(多分合ってます)
入力
・Key:"key"
・Text:"text"

出力
・HMACMD5:"d0ca6177c61c975fd2f8c07d8c6528c6"
・HMACRIPEMD160:"4d8346547b3779dc51f53313db96061c80292806"
・HMACSHA1:"369e2959eb49450338b212748f77d8ded74847bb"
・HMACSHA256:"6afa9046a9579cad143a384c1b564b9a250d27d6f6a63f9f20bf3a7594c9e2c6"
・HMACSHA384:"57c1323ef95b53bc7371d770cd31419d104cb5bcdb5ca6372364246f1884180657d5429860ac72ce19f9109d38ad54b6"
・HMACSHA512:"b585312acdd38ec13f13bb4cba35a75473f32b6ae4a0303926815bd43d7a2631516b2b031f34d89eda853e948d5057de54a880c16697242dbe6a1ad994bc4e5d"

そして〜ソースコードをどうぞ〜!
 →引数に初期値を与えています。→答え合わせしやすいように〜
 →30行目を必要に応じて書き換えてね〜それだけでばっちりだから!
 →関数名も書き換えるよね〜(笑)

L001:'=======================================================================
L002:'呼び出し元
L003:'=======================================================================
L004:Private Sub Example()
L005: Debug.Print HmacSha512("key", "text")
L006:End Sub
L007:'=======================================================================
L008:
L009:'=======================================================================
L010:'暗号化する
L011:'Key 秘密鍵
L012:'text メッセージ文字列
L013:'=======================================================================
L014:Private Function HmacSha512( _
L015: Optional key As String = "", _
L016: Optional text As String = "" _
L017: ) As String
L018:'-----------------------------------------------------------------------
L019:'キーとテキストのバイト配列を作成する
L020: Dim utf8 As Object
L021: Set utf8 = CreateObject("System.Text.UTF8Encoding")
L022: Dim keyEncodedBytes() As Byte
L023: keyEncodedBytes = utf8.Getbytes_4(key)
L024: Dim textEncodedBytes() As Byte
L025: textEncodedBytes = utf8.Getbytes_4(text)
L026: Set utf8 = Nothing
L027:
L028:'バイト配列のハッシュ値を取得する
L029: Dim hmac As Object
L030: Set hmac = CreateObject("System.Security.Cryptography.HMACSHA512")
L031: hmac.key = keyEncodedBytes
L032: Dim hashEncodedBytes() As Byte
L033: hashEncodedBytes = hmac.ComputeHash_2(textEncodedBytes)
L034: Set hmac = Nothing
L035:
L036:'文字列に変換する
L037: Dim hashEncodedByte As Variant
L038: Dim hash As String
L039: For Each hashEncodedByte In hashEncodedBytes
L040: hash = hash & Right("0" & Hex(hashEncodedByte), 2)
L041: Next
L042: HmacSha512 = LCase(hash)
L043:
L044:End Function
L045:'===============================================================================

検索キーワード
HMAC
HMACMD5
HMAC MD5
HMACRIPEMD160
HMAC RIPEMD160
HMACSHA1
HMAC SHA1
HMACSHA256
HMAC SHA256
HMACSHA384
HMAC SHA384
HMACSHA512
HMAC SHA512
Excel VBA
Access VBA
VB6
Visual Basic 6.0
WSH
Windows Script Host
dotNet
Amazon Web Services

以上