引入依赖:
<!--国产加密算法-->
<!-- SM加密算法依赖 -->
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.68</version>
</dependency>
工具类代码:
package com.cj.core.utils.md5;
import com.cj.core.exception.MyException;
import com.cj.core.exception.MyJudge;
import org.bouncycastle.crypto.digests.SM3Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.KeyParameter;
import java.io.UnsupportedEncodingException;
import java.util.Base64;
/**
* @Author: LiuLei
* @Description: SM3加密工具类
* @Date: 2023/8/4 9:54
* @Version: 1.0
*/
public class Sm3Utils {
/**
* 编码方式
*/
private static final String ENCODING = "UTF-8";
/**
* 密匙
*/
private static final String KEY = "这里是密匙";
/**
* SM3加密方式之: 根据自定义密钥进行加密
*
* @param source 明文
* @param uppercase 是否大小写
* @return
*/
public static String encrypt(String source, boolean uppercase) {
String resultStr;
try {
byte[] srcByte = source.getBytes(ENCODING);
byte[] keyByte = KEY.getBytes(ENCODING);
//设置密匙
KeyParameter keyParameter = new KeyParameter(keyByte);
//实例化SM3加密
SM3Digest sm3 = new SM3Digest();
//添加密匙
HMac hMac = new HMac(sm3);
hMac.init(keyParameter);
//生成HASH值
hMac.update(srcByte, 0, srcByte.length);
byte[] result = new byte[hMac.getMacSize()];
hMac.doFinal(result, 0);
//转换为Base64字符串
resultStr = Base64.getEncoder().encodeToString(result);
} catch (UnsupportedEncodingException e) {
throw new MyException(e.getMessage());
}
//判断resultStr是否为null
MyJudge.notNull(resultStr,"SM3加密失败");
return uppercase ? resultStr.toUpperCase() : resultStr;
}
/**
* SM3加密方式之: 无密匙进行加密
*
* @param source 明文
* @param uppercase 是否大小写
* @return
*/
public static String encrypt2(String source, boolean uppercase) {
String resultStr;
try {
byte[] srcByte = source.getBytes(ENCODING);
//实例化SM3加密
SM3Digest sm3 = new SM3Digest();
//生成HASH值
sm3.update(srcByte, 0, srcByte.length);
byte[] result = new byte[sm3.getDigestSize()];
sm3.doFinal(result, 0);
//转换为Base64字符串
resultStr = Base64.getEncoder().encodeToString(result);
} catch (UnsupportedEncodingException e) {
throw new MyException(e.getMessage());
}
//判断resultStr是否为null
MyJudge.notNull(resultStr,"SM3加密失败");
return uppercase ? resultStr.toUpperCase() : resultStr;
}
public static void main(String[] args) {
System.out.println(encrypt("1231232131",true));
System.out.println(encrypt2("1231232131",true));
}
}