Class SM4

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

public class SM4 extends Object
SM4国密对称加密算法工具类,对标AES算法

SM4是中国国家密码标准的对称加密算法,用于数据加密

本类提供了数据加密、解密功能,支持GCM模式(认证加密,防篡改)

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

    • SM4

      public SM4()
  • Method Details

    • generateKey

      public String generateKey()
      生成SM4算法的随机密钥

      该方法使用安全随机数生成器生成16字节(128位)的随机密钥, 符合SM4算法的密钥长度要求。生成的密钥经过Base64编码后返回, 便于存储和传输。

      Returns:
      Base64编码的16字节随机密钥
      See Also:
      • KEY_LENGTH
    • generateHexKey

      public String generateHexKey()
      生成SM4算法的随机密钥(十六进制格式)

      该方法使用安全随机数生成器生成16字节(128位)的随机密钥, 符合SM4算法的密钥长度要求。生成的密钥经过十六进制编码后返回, 便于在需要十六进制密钥格式的场景中使用。

      Returns:
      十六进制编码的16字节随机密钥(长度为32个字符)
      See Also:
      • KEY_LENGTH
    • encrypt

      public SM4.SM4Result encrypt(String data, String base64Key)
      使用SM4算法加密数据(GCM模式,无填充)

      该方法使用Base64编码的密钥对明文数据进行加密,采用GCM模式并生成随机Nonce。 GCM模式提供认证加密(AEAD),同时保证机密性和完整性。 加密结果包含Nonce和加密后的数据(含认证标签),均以Base64编码返回。

      Parameters:
      data - 待加密的明文字符串(UTF-8编码)
      base64Key - Base64编码的16字节SM4密钥
      Returns:
      SM4Result对象,包含Base64编码的Nonce和加密数据;加密失败返回null
      See Also:
    • encryptToString

      public String encryptToString(String data, String base64Key)
      使用SM4算法加密数据并返回字符串格式结果

      该方法是encrypt方法的便捷封装,将加密结果转换为字符串格式, 便于直接存储或传输。字符串格式为 "nonce.data",其中nonce和data均为Base64编码。

      Parameters:
      data - 待加密的明文字符串(UTF-8编码)
      base64Key - Base64编码的16字节SM4密钥
      Returns:
      加密结果字符串,格式为 "nonce.data"(均为Base64编码);加密失败返回null
      See Also:
    • decryptFromString

      public String decryptFromString(String encryptedStr, String base64Key)
      从字符串格式的加密数据中解密出明文

      该方法是decrypt方法的便捷封装,用于处理字符串格式的加密结果。 输入字符串格式为 "nonce.data",其中nonce和data均为Base64编码。 方法先将字符串解析为SM4Result对象,再调用decrypt方法进行解密。

      Parameters:
      encryptedStr - 加密结果字符串,格式为 "nonce.data"(均为Base64编码)
      base64Key - Base64编码的16字节SM4密钥
      Returns:
      解密后的明文字符串(UTF-8编码);解密失败返回null
      See Also:
    • decrypt

      public String decrypt(SM4.SM4Result result, String base64Key)
      使用SM4算法解密数据(GCM模式,无填充)

      该方法使用Base64编码的密钥对加密数据进行解密。需要提供包含Nonce 和加密数据的SM4Result对象,解密后返回UTF-8编码的明文字符串。 GCM模式会验证数据完整性,如果数据被篡改会抛出异常。

      Parameters:
      result - SM4Result对象,包含Base64编码的Nonce和加密数据
      base64Key - Base64编码的16字节SM4密钥
      Returns:
      解密后的明文字符串(UTF-8编码);解密失败返回null
      See Also:
    • encryptHex

      public String encryptHex(String data, String hexKey)
      使用十六进制格式的密钥加密数据(GCM模式,无填充)

      该方法使用十六进制编码的密钥对明文数据进行加密,采用GCM模式并生成随机Nonce。 加密结果将Nonce(前12字节)和加密数据(含认证标签)拼接后转换为十六进制字符串返回。

      Parameters:
      data - 待加密的明文字符串(UTF-8编码)
      hexKey - 十六进制表示的16字节SM4密钥(长度为32个字符)
      Returns:
      十六进制编码的加密结果(前24个字符为Nonce,后续为加密数据+认证标签);加密失败返回null
      See Also:
      • ALGORITHM_TRANSFORMATION
      • GCM_NONCE_LENGTH
    • decryptHex

      public String decryptHex(String hexData, String hexKey)
      使用十六进制格式的密钥解密数据(GCM模式,无填充)

      该方法使用十六进制编码的密钥对加密数据进行解密。输入的加密数据格式为: 前12字节(24个十六进制字符)为Nonce,后续为加密数据(含认证标签)。 解密后返回UTF-8编码的明文字符串。 GCM模式会验证数据完整性,如果数据被篡改会抛出异常。

      Parameters:
      hexData - 十六进制表示的加密数据(前24个字符为Nonce,后续为加密内容+认证标签)
      hexKey - 十六进制表示的16字节SM4密钥(长度为32个字符)
      Returns:
      解密后的明文字符串(UTF-8编码);解密失败返回null
      See Also:
      • ALGORITHM_TRANSFORMATION
      • GCM_NONCE_LENGTH