Class SM3

java.lang.Object
tech.riemann.nif.utils.codec.SM3

public class SM3 extends Object
SM3密码哈希算法工具类(对标MD5,SHA-1,SHA-256等散列算法)

SM3是中国国家标准的密码散列函数,用于生成密码的安全哈希值

本类提供了密码哈希生成和验证功能,使用盐值增强安全性

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

    • SM3

      public SM3()
  • Method Details

    • digest

      public String digest(String plaintext)
      对明文进行SM3摘要(无盐,确定性摘要)

      适用于签名/完整性校验等需要确定性摘要的场景:相同输入始终得到相同输出。 区别于 hashPassword(String)(带随机盐,用于密码存储)。

      Parameters:
      plaintext - 明文(UTF-8)
      Returns:
      64 位十六进制摘要;算法不可用时返回 null
    • hashPassword

      public String hashPassword(String password)
      对密码进行SM3哈希处理(带盐值)

      该方法使用SM3密码哈希算法对密码进行安全哈希处理,采用加盐策略增强安全性, 有效防止彩虹表攻击。处理流程: 1. 生成16字节的随机盐值 2. 对密码进行SM3哈希 3. 将盐值与密码哈希混合 4. 再次进行SM3哈希得到最终哈希值 5. 将盐值与最终哈希值混合后进行Base64编码返回

      Parameters:
      password - 明文密码(UTF-8编码)
      Returns:
      包含盐值的Base64编码哈希值(格式:盐值+哈希值混合后Base64编码);失败返回null
      See Also:
      • SALT_LENGTH
      • mix(byte[], byte[])
    • verifyPassword

      public boolean verifyPassword(String password, String hashedPassword)
      验证密码是否与存储的哈希值匹配

      该方法用于验证用户输入的密码是否与存储的哈希值匹配。验证流程: 1. 对存储的Base64编码哈希值进行解码 2. 校验数据长度有效性 3. 从解码数据中提取盐值 4. 使用相同的盐值对输入密码进行SM3哈希处理 5. 比较计算得到的哈希值与存储的哈希值是否相等

      Parameters:
      password - 用户输入的明文密码(UTF-8编码)
      hashedPassword - 存储的包含盐值的Base64编码哈希值
      Returns:
      如果密码匹配返回true,否则返回false;数据格式无效也返回false
      See Also:
      • SALT_LENGTH
      • split(byte[])
      • mix(byte[], byte[])