Skip to content

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

参数

参数类型说明
DataString要签名的数据
KeyStringString密钥字符串
AlgorithmHMACAlgorithm可选,算法(默认使用类属性)
EncodingHMACStringEncoding可选,编码(默认 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 cCryptoHMAC

Secret 方法

设置密钥,支持字符串、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 cCryptoHMAC

DataString 方法

输入字符串数据。

vb
Public Function DataString(ByVal Text As String, _
                           Optional ByVal Encoding As HMACStringEncoding = HMAC_ENCODING_UTF8) As cCryptoHMAC

DataBytes 方法

输入字节数组数据。

vb
Public Function DataBytes(ByRef Data() As Byte) As cCryptoHMAC

ReturnHex 方法

返回十六进制格式的 HMAC。

vb
Public Function ReturnHex(Optional ByVal UpperCase As Boolean = False) As String

ReturnBase64 方法

返回 Base64 格式的 HMAC。

vb
Public Function ReturnBase64() As String

ReturnBytes 方法

返回字节数组格式的 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 Function

JWT 签名

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

VB6及其LOGO版权为微软公司所有