SpringBoot 实现国家机密 SM4 加密、解密
最编程
2024-07-10 16:59:59
...
一、SM4介绍
SM4.0(原名SMS4.0)是**采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布。相关标准为“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”。
在商用密码体系中,SM4主要用于数据加密,其算法公开,分组长度与密钥长度均为128bit,加密算法与密钥扩展算法都采用32轮非线性迭代结构,S盒为固定的8比特输入8比特输出。
SM4.0中的指令长度被提升到大于64K(即64×1024)的水平,这是SM 3.0规格(渲染指令长度允许大于512)的128倍。
二、引入Hutool工具类
POM文件引入下面两个依赖
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<version>1.69</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.5</version>
</dependency>
三、新建SM4Util
package org.demo.utils;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
import cn.hutool.core.util.StrUtil;
public class SM4Utils {
//key必须是16字节,即128位
final static String key = "testsm4key123456";
//指明加密算法和秘钥
static SymmetricCrypto sm4 = new SymmetricCrypto("SM4/ECB/PKCS5Padding", key.getBytes());
/**
* 加密为16进制,也可以加密成base64/字节数组
*
* @param plaintext
* @return
*/
public static String encryptSm4(String plaintext) {
if (StrUtil.isBlank(plaintext)) {
return "";
}
return sm4.encryptHex(plaintext);
}
/**
* 解密
*
* @param ciphertext
* @return
*/
public static String decryptSm4(String ciphertext) {
if (StrUtil.isBlank(ciphertext)) {
return "";
}
return sm4.decryptStr(ciphertext);
}
}
四、使用
public static void main(String[] args) {
String str = SM4Utils.encryptSm4("测试加密");
System.out.println("加密后的字符串为"+str);
System.out.println("解密后的字符串为"+SM4Utils.decryptSm4(str));
}
以上内容就是使用Hutools实现国密算法SM4的全过程,有问题可以私信博主
推荐阅读
-
使用JavaScript实现AES算法的加密和解密功能
-
前端Vue使用cryptoJS加密数据,后端Java解密数据实现
-
JavaScript中的RSA和AES加密解密算法的实现
-
加密越来越简单——用JavaScript实现数据加密和解密-1. MD5加密算法
-
使用crypto-js库实现AES加密和解密操作的JavaScript代码
-
用Python实现LTE的加密与解密算法流程
-
如何在PHP中实现RC4加密和解密操作
-
用于加密和解密的 xor 算法的 Java 实现 - 2. xor 加密代码示例
-
国密算法 SM4 的 GCM 模式加密和解密实现
-
SM4 国家机密:vue 前端+秘密,Springboot 后端解密