SM4 加密算法

746 阅读1分钟
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);