com.supermap.data
类 SM4Cipher
- java.lang.Object
-
- com.supermap.data.InternalHandle
-
- com.supermap.data.InternalHandleDisposable
-
- com.supermap.data.SM4Cipher
-
- 所有已实现的接口:
- IDisposable
public class SM4Cipher extends com.supermap.data.InternalHandleDisposableSM4(国密4)加解密工具, 目前支持CTR和CBC模式- 从以下版本开始:
- 11.2.0
- 示范代码:
- 示范如何使用SM4(国密4)加解密工具
// 密钥key 长度必须是 16 byte即128 bit
Stringkey = "12345678abcdefgh"; // 初始向量iv 长度必须是 16 byte即128 bitStringiv = "hgfedcba87654321";Stringmsg = "Hello the world!";SM4Ciphercipher =SM4Cipher.getInstance("CTR", key.getBytes(), iv.getBytes()); byte[] encrypted = cipher.encrypt(msg.getBytes()); byte[] result = cipher.decrypt(encrypted);StringresultString = newString(result);
-
-
嵌套类概要
嵌套类 限定符和类型 类和说明 static classSM4Cipher.GCMEncryptResultGCM模式加密结果
-
构造器概要
构造器 构造器和说明 SM4Cipher()
-
方法概要
所有方法 静态方法 实例方法 具体方法 限定符和类型 方法和说明 byte[]decrypt(byte[] input)解密操作byte[]decryptGCM(byte[] input, byte[] aad, byte[] tag)GCM解密操作voiddispose()释放资源byte[]encrypt(byte[] input)加密操作SM4Cipher.GCMEncryptResultencryptGCM(byte[] input, byte[] aad, int tagLength)GCM加密操作static SM4CiphergetInstance(String transformation, byte[] key, byte[] iv)创建SM4(国密4)加解密对象,目前支持CTR和CBC模式(使用SM4Cipher.encrypt(byte[])加密、SM4Cipher.decrypt(byte[])解密)。
-
-
-
方法详细资料
-
getInstance
public static SM4Cipher getInstance(String transformation, byte[] key, byte[] iv)
创建SM4(国密4)加解密对象,目前支持CTR和CBC模式(使用SM4Cipher.encrypt(byte[])加密、SM4Cipher.decrypt(byte[])解密)。还支持GCM模式使用SM4Cipher.encryptGCM(byte[], byte[], int)加密和SM4Cipher.decryptGCM(byte[], byte[], byte[])解密。- 参数:
transformation- 模式字符串,支持'CTR'、'CBC'和'GCM'key- 加解密密钥, 长度只能是 16 byte即128 bitiv- 初始向量, 长度只能是 16 byte即128 bit- 返回:
- SM4(国密4)加解密工具对象
- 抛出:
IllegalArgumentException- transformation为空或者长度为0IllegalArgumentException- key为空IllegalArgumentException- key长度不为16位IllegalArgumentException- iv为空IllegalArgumentException- iv长度不为16位- 从以下版本开始:
- 11.2.0
-
encrypt
public byte[] encrypt(byte[] input)
加密操作- 参数:
input- 输入的缓冲区- 返回:
- 结果缓冲区
- 抛出:
IllegalStateException- 对象已经被disposeIllegalArgumentException- 输入的缓冲区为空IllegalArgumentException- 输入的缓冲区长度必须为16的倍数- 从以下版本开始:
- 11.2.0
- 另请参阅:
查看示例
-
encryptGCM
public SM4Cipher.GCMEncryptResult encryptGCM(byte[] input, byte[] aad, int tagLength)
GCM加密操作- 参数:
input- 输入的缓冲区aad- 附加消息(AAD,Additional Authenticated Data)附加消息是可选的输入,用于提供额外的上下文信息,最终被包含在消息认证码(MAC)计算中。如果不需要,可以设置为null。tagLength- 需要传出的认证标签长度。不能超过16字节。如果不需要,可以设置为0。- 返回:
- 加密结果对象,包含加密结果内容和认证标签
- 抛出:
IllegalStateException- 对象已经被disposeIllegalArgumentException- 输入的缓冲区为空IllegalArgumentException- 输入的缓冲区长度必须为16的倍数IllegalArgumentException- 输入的认证标签长度小于0或者大于16- 从以下版本开始:
- 11.2.0
- 示范代码:
- 示范如何使用SM4(国密4)加解密工具GCM模式加解密
// 密钥key 长度必须是 16 byte即128 bit
Stringkey = "12345678abcdefgh"; // 初始向量iv 长度必须是 16 byte即128 bitStringiv = "hgfedcba87654321"; // aad-附加消息长度和内容任意,这个内容不会被加密,但是会用于计算认证标签,所以需要加解密输入相同内容Stringaad = "000111222333444555666777"; // 输入加解密的数据长度必须是16 byte的整数倍Stringmsg = "Hello the world!";SM4Ciphercipher =SM4Cipher.getInstance("GCM", key.getBytes(), iv.getBytes()); int tagLength = 16;SM4Cipher.GCMEncryptResult gcmEncryptResult = cipher.encryptGCM(msg.getBytes(), aad.getBytes(), tagLength); byte[] encrypted = gcmEncryptResult.getResult(); // 还需要从加密结果中获取到认证标签,传入解密函数中才能正确解密 byte[] tag = gcmEncryptResult.getTag(); byte[] result = cipher.decryptGCM(encrypted, aad.getBytes(), tag);StringresultString = newString(result);
-
decrypt
public byte[] decrypt(byte[] input)
解密操作- 参数:
input- 输入的缓冲区- 返回:
- 结果缓冲区
- 抛出:
IllegalStateException- 对象已经被disposeIllegalArgumentException- 输入的缓冲区为空IllegalArgumentException- 输入的缓冲区长度必须为16的倍数- 从以下版本开始:
- 11.2.0
- 另请参阅:
查看示例
-
decryptGCM
public byte[] decryptGCM(byte[] input, byte[] aad, byte[] tag)GCM解密操作- 参数:
input- 输入的缓冲区aad- 附加消息(AAD,Additional Authenticated Data)附加消息是可选的输入,用于提供额外的上下文信息,最终被包含在消息认证码(MAC)计算中。如果不需要,可以设置为null。tag- GCM模式加密过程计算出的认证标签。用于验证加密数据的完整性和认证数据的真实性。如果不需要,可以设置为null。- 返回:
- 加密结果对象,包含加密结果内容和认证标签
查看示例
SM4Cipher.encryptGCM(byte[], byte[], int) - 抛出:
IllegalStateException- 对象已经被disposeIllegalArgumentException- 输入的缓冲区为空IllegalArgumentException- 输入的缓冲区长度必须为16的倍数IllegalArgumentException- 输入的认证标签长度必须小于16- 从以下版本开始:
- 11.2.0
-
dispose
public void dispose()
释放资源
-
-
Copyright © 2021–2025 SuperMap. All rights reserved.