Class Sm3SignGenerator

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

public class Sm3SignGenerator extends Object implements SignGenerator
国密SM3摘要签名生成器(对称摘要比对)

与 HMAC/RSA/SM2 并列纳入策略体系:签名端对规范化后的待签名内容做 SM3 摘要, 验证端使用相同的 secret(作为前缀盐增强)对内容重算摘要并比对,达到「完整性 + 简易认证」效果。

与 HMAC 的区别:HMAC 是带密钥的 MAC(防篡改且需密钥),SM3 在此作为「带密钥前缀的确定性摘要」, 仅依赖对称 secret,更适合轻量、无需非对称密钥对的国密合规场景。

规范化规则与 HMAC 共用 SignGenerator.buildSignContent(Map, String, String, String)。

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

    • Sm3SignGenerator

      public Sm3SignGenerator()
  • 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)
      Description copied from interface: SignGenerator
      生成签名(完整参数)

      签名内容组成(按字典序排序后连接): 1. 请求参数的SHA-256摘要(paramsMd5,字段名沿用既有结构兼容) 2. 应用密钥(appSecret) 3. 时间戳(timestamp) 4. 请求路径(requestPath) 5. 随机字符串(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)
      Description copied from interface: SignGenerator
      验证签名(完整参数)
      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算法