pom中引入
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15to18</artifactId>
<version>1.71</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.0.3</version>
</dependency>
SM2非对称加密
package com.sm.sm2;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 描述: 国密算法生成秘钥对 - 对象 <br>
* 时间: 2022-07-14 16:01 <br>
* 作者:王林冲
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SM2KeyPairs {
/**
*公钥
*/
private String publicKey;
/**
* 私钥
*/
private String privateKey;
}
SM2非对称加密辅助类
package com.sm.sm2;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.SM2;
/**
* 描述: SM2非对称加密辅助类 <br>
* 时间: 2022-07-14 16:01 <br>
* 作者:王林冲
*/
public class SM2Util {
/**
* 私钥解密
* @param privateKey 私钥
* @param text 加密文本
* @return 解密后文本
*/
public static String decrypt(String privateKey, String text){
// 通过密钥解密
SM2 sm2 = SmUtil.sm2(privateKey, null);
String decryptText = sm2.decryptStr(text, KeyType.PrivateKey);
return decryptText;
}
/**
* 公钥加密
* @param publicKey 公钥
* @param text 预加密文本
* @return 加密后文本
*/
public static String encrypt(String publicKey, String text){
// 通过密钥解密
SM2 sm2 = SmUtil.sm2(null, publicKey);
String encryptText = sm2.encryptBase64(text, KeyType.PublicKey);
return encryptText;
}
/**
* 获取公钥私钥
* @return SM2KeyPairs 公私钥对象
*/
public static SM2KeyPairs getKeyPairs(){
SM2 sm = SmUtil.sm2();
String privateKey = sm.getPrivateKeyBase64();
String publicKey = sm.getPublicKeyBase64();
SM2KeyPairs keyPairs = new SM2KeyPairs(publicKey, privateKey);
return keyPairs;
}
}
SM3国密算法辅助类 ,SM3加密不可逆,类似 md5
package com.sm.sm3;
import cn.hutool.crypto.SmUtil;
/**
* 描述: SM3国密算法辅助类 ,SM3加密不可逆,类似 md5<br>
* 时间: 2022-07-14 16:49 <br>
* 作者:王林冲
*/
public class SM3Util {
public static void test() {
String encrypt = encrypt("123456");
System.out.println(encrypt);
}
public static String encrypt(String text) {
String digestHex = SmUtil.sm3(text);
return digestHex;
}
}
国密SM4对称加密算法辅助类
package com.sm.sm4;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
/**
* 描述: 国密SM4对称加密算法辅助类<br>
* 时间: 2022-07-14 16:01 <br>
* 作者:王林冲
*/
public class SM4Util {
//key必须是16字节,即128位
final static String key = "sm4demo123456789";
//指明加密算法和秘钥
static SymmetricCrypto sm4 = new SymmetricCrypto("SM4/ECB/PKCS5Padding", key.getBytes());
//加密为16进制,也可以加密成base64/字节数组
public static String encrypt(String text) {
return sm4.encryptHex(text);
}
//解密
public static String decrypt(String text) {
return sm4.decryptStr(text);
}
public static void main(String[] args) {
String text = "hello sm4";
String encryptText = encrypt(text);
String decryptText = decrypt(encryptText);
System.out.println(encryptText + "\n" + decryptText);
}
}