hutool 国密算法工具类 SmUtil
所属分类 hutool
浏览量 106
https://doc.hutool.cn/pages/SmUtil/
Hutool针对Bouncy Castle做了简化包装,用于实现国密算法中的SM2、SM3、SM4。
国密算法工具封装包括:
非对称加密和签名:SM2
摘要签名算法:SM3
对称加密:SM4
国密算法需要引入Bouncy Castle库的依赖。
org.bouncycastle:bcprov-jdk18on:1.74
// 使用随机生成的密钥
String text = "hello,你好";
byte[] dataBytes = text.getBytes(StandardCharsets.UTF_8);
SM2 sm2 = SmUtil.sm2();
// 公钥加密,私钥解密
byte[] encryptBytes = sm2.encrypt(dataBytes, KeyType.PublicKey);
byte[] decryptBytes = sm2.decrypt(encryptBytes,KeyType.PrivateKey);
String decryptStr = StrUtil.utf8Str(decryptBytes);
System.out.println(decryptStr);
KeyPair pair = SecureUtil.generateKeyPair("SM2");
byte[] privateKey = pair.getPrivate().getEncoded();
byte[] publicKey = pair.getPublic().getEncoded();
sm2 = SmUtil.sm2(privateKey, publicKey);
encryptBytes = sm2.encrypt(dataBytes);
decryptBytes = sm2.decrypt(encryptBytes);
decryptStr = StrUtil.utf8Str(decryptBytes);
System.out.println(decryptStr);
byte[] signBytes = sm2.sign(dataBytes);
boolean verify = sm2.verify(dataBytes, signBytes);
System.out.println("verify="+verify);
// 摘要算法SM3
String digestHex = SmUtil.sm3(text);
System.out.println("sm3.digestHex="+digestHex);
// 对称加密SM4
// 使用生成的随机密钥
SymmetricCrypto sm4 = SmUtil.sm4();
String encryptHex = sm4.encryptHex(text);
decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
System.out.println("sm4.decryptStr="+decryptStr);
// 使用自定义密钥
byte[] key = KeyUtil.generateKey(SM4.ALGORITHM_NAME, 128).getEncoded();
sm4 = SmUtil.sm4(key);
encryptHex = sm4.encryptHex(text);
decryptStr = sm4.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
System.out.println("sm4.mykey.decryptStr="+decryptStr);
https://gitee.com/dyyx/work2024/blob/master/demo/hutooldemo/src/main/java/crypto/SmUtilDemo.java
上一篇
下一篇
hutool 加密解密工具 SecureUtil
Java开源加密库 Bouncy Castle BC库
国密算法
JWT(JSON Web Token)
hutool JWT 例子
springboot jpa 实例