HMAC 方法参考
📋 方法列表
传统方式
| 方法 | 说明 |
|---|---|
SetKey | 从字符串设置密钥 |
SetKeyBytes | 从字节数组设置密钥 |
Compute | 计算字符串 HMAC(返回 Hex) |
ComputeBytes | 计算字节数组 HMAC(返回字节数组) |
ComputeBytesToHex | 计算字节数组 HMAC(返回 Hex) |
链式调用方式
| 方法 | 说明 |
|---|---|
Mode | 设置 HMAC 算法 |
Secret | 从字符串/Hex/Base64 设置密钥 |
SecretBytes | 从字节数组设置密钥 |
DataString | 输入字符串数据 |
DataBytes | 输入字节数组数据 |
ReturnHex | 返回 Hex 格式结果 |
ReturnBase64 | 返回 Base64 格式结果 |
ReturnBytes | 返回字节数组结果 |
🔑 SetKey / SetKeyBytes 方法
说明
设置 HMAC 密钥(传统方式)。
语法
vb
' 从字符串设置
Public Sub SetKey(ByVal KeyString As String, _
Optional ByVal Encoding As HMACStringEncoding = HMAC_ENCODING_UTF8)
' 从字节数组设置
Public Sub SetKeyBytes(ByRef KeyBytes() As Byte)使用示例
vb
Dim Hmac As New cCryptoHMAC
' 设置 UTF-8 密钥
Hmac.SetKey("my-secret-key")
' 设置 ANSI 密钥
Hmac.SetKey("my-secret-key", HMAC_ENCODING_ANSI)
' 设置字节数组密钥
Dim keyBytes() As Byte
keyBytes = StrConv("my-key", vbFromUnicode)
Hmac.SetKeyBytes(keyBytes)🔐 Compute 方法
说明
计算字符串数据的 HMAC,返回十六进制字符串。
语法
vb
Public Function Compute(ByVal Data As String, _
ByVal KeyString As String, _
Optional ByVal Algorithm As HMACAlgorithm, _
Optional ByVal Encoding As HMACStringEncoding = HMAC_ENCODING_UTF8) As String参数
| 参数 | 类型 | 说明 |
|---|---|---|
Data | String | 要签名的数据 |
KeyString | String | 密钥字符串 |
Algorithm | HMACAlgorithm | 可选,算法(默认使用类属性) |
Encoding | HMACStringEncoding | 可选,编码(默认 UTF8) |
使用示例
vb
Dim Hmac As New cCryptoHMAC
Dim result As String
' 简单计算
result = Hmac.Compute("data to sign", "secret-key")
' 指定算法
result = Hmac.Compute("data to sign", "secret-key", HMAC_ALG_SHA256)⛓️ 链式调用方法
Mode 方法
设置 HMAC 算法。
vb
Public Function Mode(ByVal Algorithm As HMACAlgorithm) As cCryptoHMACSecret 方法
设置密钥,支持字符串、Hex、Base64 格式。
vb
Public Function Secret(ByVal KeyString As String, _
Optional ByVal KeyType As SecretKeyType = SECRET_KEY_STRING, _
Optional ByVal Encoding As HMACStringEncoding = HMAC_ENCODING_UTF8) As cCryptoHMAC密钥类型:
SECRET_KEY_STRING- 普通字符串(默认)SECRET_KEY_HEX- Hex 编码的密钥SECRET_KEY_BASE64- Base64 编码的密钥
SecretBytes 方法
从字节数组设置密钥。
vb
Public Function SecretBytes(ByRef KeyBytes() As Byte) As cCryptoHMACDataString 方法
输入字符串数据。
vb
Public Function DataString(ByVal Text As String, _
Optional ByVal Encoding As HMACStringEncoding = HMAC_ENCODING_UTF8) As cCryptoHMACDataBytes 方法
输入字节数组数据。
vb
Public Function DataBytes(ByRef Data() As Byte) As cCryptoHMACReturnHex 方法
返回十六进制格式的 HMAC。
vb
Public Function ReturnHex(Optional ByVal UpperCase As Boolean = False) As StringReturnBase64 方法
返回 Base64 格式的 HMAC。
vb
Public Function ReturnBase64() As StringReturnBytes 方法
返回字节数组格式的 HMAC。
vb
Public Function ReturnBytes() As Byte()📌 链式调用示例
基本链式调用
vb
Dim Hmac As New cCryptoHMAC
Dim result As String
' 完整链式调用
result = Hmac.Mode(HMAC_ALG_SHA256) _
.Secret("secret-key") _
.DataString("data to sign") _
.ReturnHex()使用 Hex 密钥
vb
' 使用 Hex 格式的密钥
result = Hmac.Mode(HMAC_ALG_SHA256) _
.Secret("deadbeef123456", SECRET_KEY_HEX) _
.DataString("data") _
.ReturnHex()多种格式输出
vb
' 设置密钥和数据
Hmac.Mode(HMAC_ALG_SHA256) _
.Secret("secret") _
.DataString("data")
' 获取不同格式
Debug.Print "Hex: " & Hmac.ReturnHex()
Debug.Print "Hex(Upper): " & Hmac.ReturnHex(True)
Debug.Print "Base64: " & Hmac.ReturnBase64()📌 使用场景总结
API 请求签名
vb
Private Function SignApiRequest(ByVal method As String, _
ByVal path As String, _
ByVal timestamp As String, _
ByVal apiSecret As String) As String
Dim Hmac As New cCryptoHMAC
Dim dataToSign As String
' 构建签名字符串
dataToSign = method & "|" & path & "|" & timestamp
' 计算 HMAC
SignApiRequest = Hmac.Mode(HMAC_ALG_SHA256) _
.Secret(apiSecret) _
.DataString(dataToSign) _
.ReturnHex()
End Function消息认证
vb
Private Function CreateMessageAuth(ByVal message As String, _
ByVal sharedSecret As String) As String
Dim Hmac As New cCryptoHMAC
' 创建消息认证码
CreateMessageAuth = Hmac.Compute(message, sharedSecret, HMAC_ALG_SHA256)
End Function
Private Function VerifyMessageAuth(ByVal message As String, _
ByVal mac As String, _
ByVal sharedSecret As String) As Boolean
Dim Hmac As New cCryptoHMAC
Dim expectedMac As String
' 重新计算 MAC
expectedMac = Hmac.Compute(message, sharedSecret, HMAC_ALG_SHA256)
' 比较(不区分大小写)
VerifyMessageAuth = (LCase(mac) = LCase(expectedMac))
End FunctionJWT 签名
vb
Private Function CreateJwtSignature(ByVal headerBase64 As String, _
ByVal payloadBase64 As String, _
ByVal secret As String) As String
Dim Hmac As New cCryptoHMAC
Dim signingInput As String
' JWT 签名输入
signingInput = headerBase64 & "." & payloadBase64
' HS256 签名
CreateJwtSignature = Hmac.Mode(HMAC_ALG_SHA256) _
.Secret(secret) _
.DataString(signingInput) _
.ReturnBase64()
End Function最后更新: 2026-05-17