で、できました。
スーの道具箱/気まぐれ日記/2007-03-08ここからコピペして標準モジュールへ貼り付け。
VBでハッシュを求める *
MD5をVBで処理すると遅くなってしまうので、advapi32.dllを使うと簡単だし速い。
あまりサンプルが見当たらなかったので、書いてみた
おそらくExcel2000以上で動くと思います。
(vba6なら動くと思います)
Public Function hmac(ByVal key As String, ByVal data As String) As String
Dim i As Integer
Dim hash As String
Dim key_byte() As Byte
Dim key_len As Long
Dim data_len As Long
Dim ipad(63) As Byte
Dim opad(63) As Byte
Dim key_hash() As Byte
Dim data_hash As String
If key = "" And data = "" Then Exit Function
key_len = Len(key)
key_byte = StrConv(key, vbFromUnicode)
If key_len > 64 Then
key_hash = StrToBynary(CreateSHA1Hash(key_byte))
key_len = 20
Else
key_hash = key_byte
End If
ReDim Preserve key_hash(63)
For i = key_len To 63
key_hash(i) = 0
Next
For i = 0 To 63
ipad(i) = 0
opad(i) = 0
Next
For i = 0 To 63
ipad(i) = key_hash(i) Xor &H36
opad(i) = key_hash(i) Xor &H5C
Next
data_hash = CreateSHA1Hash(CStr(ipad) & StrConv(data, vbFromUnicode))
hash = CreateSHA1Hash(CStr(opad) & CStr(StrToBynary(data_hash)))
hmac = hash
End Function
Private Function StrToBynary(strHexString As String) As Byte()
Dim buf() As Byte
Dim i As Long
ReDim Preserve buf(Len(CStr(strHexString)) \ 2 - 1)
For i = 0 To Len(CStr(strHexString)) \ 2 - 1
buf(i) = CByte("&h" & Mid(CStr(strHexString), i * 2 + 1, 2))
Next
StrToBynary = buf
End Function
ここを参考にしました。
【Access】vbaでhmacが正しく計算できた!! | プラプラ式技術系 Access流!
HMAC SHA256 BASE64: 逢魔時 ~トワイライト~
0 件のコメント:
コメントを投稿