
国密算法SM2、SM3、SM4 的JAVA实现(结合Hutool)
·
一、简要
- Hutool针对
Bouncy Castle
做了简化包装,用于实现国密算法中的SM2、SM3、SM4。 - Hutool 的实现也是基于 BC(
Bouncy Castle
库)实现的 - 本文只实现简单功能,若有需要请移步官网
二、POM 文件引用
<!--hutool具包-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.0</version>
<scope>compile</scope>
</dependency>
<!--Bouncy Castle库-->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<version>1.69</version>
</dependency>
三、SM2
package com.prison.common.util;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
import org.junit.Test;
import java.security.KeyPair;
public class HutoolSMUtil {
@Test
public void sm2Test() {
String text = "wangjing";
//使用随机生成的密钥对加密或解密
System.out.println("使用随机生成的密钥对加密或解密====开始");
SM2 sm2 = SmUtil.sm2();
// 公钥加密
String encryptStr = sm2.encryptBcd(text, KeyType.PublicKey);
System.out.println("公钥加密:" + encryptStr);
//私钥解密
String decryptStr = StrUtil.utf8Str(sm2.decryptFromBcd(encryptStr, KeyType.PrivateKey));
System.out.println("私钥解密:" + decryptStr);
System.out.println("使用随机生成的密钥对加密或解密====结束");
//使用自定义密钥对加密或解密
System.out.println("使用自定义密钥对加密或解密====开始");
KeyPair pair = SecureUtil.generateKeyPair("SM2");
byte[] privateKey = pair.getPrivate().getEncoded();
byte[] publicKey = pair.getPublic().getEncoded();
SM2 sm22 = SmUtil.sm2(privateKey, publicKey);
// 公钥加密
String encryptStr2 = sm22.encryptBcd(text, KeyType.PublicKey);
System.out.println("公钥加密:" + encryptStr2);
//私钥解密
String decryptStr2 = StrUtil.utf8Str(sm22.decryptFromBcd(encryptStr2, KeyType.PrivateKey));
System.out.println("私钥解密:" + decryptStr2);
System.out.println("使用自定义密钥对加密或解密====结束");
}
}
执行效果
使用随机生成的密钥对加密或解密====开始
公钥加密:04357E15B4AF2E2CCA84F309A006E98D1ADB4445743E3CC4DAAD956780152E4E778A09B120691DA8B03734C72729CDED4AA93C5132562E4BD22DAFB0B5199CF84ADD4BCC85D5197BC9137AC2356B2465954A0284A5A7D864324B4FB6457D8919396C687B9C84474C0C
私钥解密:wangjing
使用随机生成的密钥对加密或解密====结束
使用自定义密钥对加密或解密====开始
公钥加密:04F9A38518E92B086C0C424F4065BDF961828D0115273394C1027D6A3D0A228529EBC7293DC95E39B6BB8E4C258269DDF579B26117C83841A4D53E0D19C573A50D65B1B4E222A5A74B8B86958A58B51241522F918D191FFE544CF4A90F1C2BD33656244E22259BF91C
私钥解密:wangjing
使用自定义密钥对加密或解密====结束
四、SM3
package com.prison.common.util;
import cn.hutool.crypto.SmUtil;
import org.junit.Test;
public class HutoolSMUtil {
@Test
public void sm3Test() {
String text = "wangjing";
String digestHex = SmUtil.sm3(text);
System.out.println("加密后:" + digestHex);
}
}
执行效果
加密后:136ce3c86e4ed909b76082055a61586af20b4dab674732ebd4b599eef080c9be
五、SM4
package com.prison.common.util;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
import org.junit.Test;
public class HutoolSMUtil {
@Test
public void sm4Test() {
String text = "wangjing";
SymmetricCrypto sm4 = SmUtil.sm4();
String encryptHex = sm4.encryptHex(text);
System.out.println("加密后:" + encryptHex);
String decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
System.out.println("解密后:" + decryptStr);
}
}
执行效果
加密后:ad0fd3d52e1345a8ccdb2fbf005741e6
解密后:wangjing
注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!
推荐内容
阅读全文
AI总结
更多推荐
相关推荐
查看更多
DeepSeek-V3-0324

DeepSeek最新推出DeepSeek-V3-0324版本,参数量从6710亿增加到6850亿,在数学推理、代码生成能力以及长上下文理解能力方面直线飙升。
javascript

JavaScript 编程指南。
Python

All Algorithms implemented in Python
热门开源项目
活动日历
查看更多
直播时间 2025-03-13 18:32:35

全栈自研企业级AI平台:Java核心技术×私有化部署实战
直播时间 2025-03-11 18:35:18

从0到1:Go IoT 开发平台的架构演进与生态蓝图
直播时间 2025-03-05 14:35:37

国产工作流引擎 终结「996」开发困局!
直播时间 2025-02-25 14:38:13

免费开源宝藏 ShopXO,电商系统搭建秘籍大公开!
直播时间 2025-02-18 14:31:04

从数据孤岛到数据智能 - 企业级数据管理利器深度解析
目录
所有评论(0)