Class HmacSignGenerator

java.lang.Object
tech.riemann.nif.web.sign.HmacSignGenerator
All Implemented Interfaces:
SignGenerator

public class HmacSignGenerator extends Object implements SignGenerator
HMAC-SHA256签名生成器

签名内容组成(按字典序排序后连接): 1. 请求参数的MD5摘要(paramsMd5) 2. 时间戳(timestamp) 3. 请求路径(requestPath) 4. 随机字符串(nonce)

M6: 应用密钥(appSecret)不再拼入被签名消息,仅作为 HMAC key 使用

签名流程: 1. 计算请求参数的MD5摘要 2. 将 paramsMd5、timestamp、requestPath、nonce 按字典序排序 3. 连接成字符串:key1=value1&key2=value2 4. 计算HMAC-SHA256哈希值(appSecret 作为 HMAC key) 5. 转换为十六进制字符串

Author:
Kerbores(kerbores@riemann.tech)
  • Constructor Details

    • HmacSignGenerator

      public HmacSignGenerator()
  • Method Details

    • generate

      public String generate(Map<String,String> params, String secret)
      Description copied from interface: SignGenerator
      生成签名

      签名生成流程: 1. 按ASCII排序参数 2. 拼接成 key1=value1&key2=value2 格式 3. 在末尾追加密钥 4. 计算哈希值

      Specified by:
      generate in interface SignGenerator
      Parameters:
      params - 业务参数(已过滤空 * @param secret 密钥
      Returns:
      签名字符串(十六进制)
    • generate

      public String generate(Map<String,String> params, String secret, String timestamp, String requestPath, String nonce)
      生成签名(完整参数)
      Specified by:
      generate in interface SignGenerator
      Parameters:
      params - 请求参数
      secret - 应用密钥
      timestamp - 时间戳(秒)
      requestPath - 请求路径
      nonce - 随机字符串
      Returns:
      签名字符串
    • verify

      public boolean verify(Map<String,String> params, String sign, String secret)
      Description copied from interface: SignGenerator
      验证签名
      Specified by:
      verify in interface SignGenerator
      Parameters:
      params - 请求参数
      sign - 签名值
      secret - 密钥
      Returns:
      是否验证通过
    • verify

      public boolean verify(Map<String,String> params, String sign, String secret, String timestamp, String requestPath, String nonce)
      验证签名(完整参数)
      Specified by:
      verify in interface SignGenerator
      Parameters:
      params - 请求参数
      sign - 签名值
      secret - 应用密钥
      timestamp - 时间戳(秒)
      requestPath - 请求路径
      nonce - 随机字符串
      Returns:
      是否验证通过
    • getAlgorithm

      public SignAlgorithm getAlgorithm()
      Description copied from interface: SignGenerator
      获取支持的算法
      Specified by:
      getAlgorithm in interface SignGenerator
      Returns:
      ical算法