import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
public class Sm4Demo {
public static void main(String[] args) {
String content = "test中文";
// 注意密钥长度必须是 16 位
SymmetricCrypto sm4 = SmUtil.sm4("helloworldhello1".getBytes());
String encryptHex = sm4.encryptBase64(content);
System.out.println(encryptHex);
String decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
System.out.println(decryptStr);
}
}
pom.xml
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.16</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<version>1.69</version>
</dependency>
js 实现 sm4 js
// 密钥要和后端的保持一致
var sKey = "helloworldhello1";
var sm4 = new JSSM4(sKey);
var text = "test中文";
console.log("原文:", text);
console.time("加密耗时");
var endata = sm4.encryptData_ECB(text);
console.timeEnd("加密耗时");
console.log("密文:", endata);
console.time("解密耗时");
var dedata = sm4.decryptData_ECB(endata);
console.timeEnd("解密耗时");
console.log("解密:", dedata);