package com.mm.util;
|
|
import org.bouncycastle.crypto.digests.SM3Digest;
|
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
|
|
import java.io.UnsupportedEncodingException;
|
import java.security.Security;
|
import java.util.Arrays;
|
|
/**
|
* @author clown
|
* * @date 2023/11/23
|
*/
|
public class SM3Util {
|
/**
|
* 编码格式
|
*/
|
private static final String ENCODING = "UTF-8";
|
|
static{
|
Security.addProvider(new BouncyCastleProvider());
|
}
|
|
/**
|
*
|
* @param paramStr 要sm3加密的内容
|
* @return sm3加密后密文
|
*/
|
public static String encrypt(String paramStr){
|
String resultHexString = "";
|
try {
|
byte[] srcData = paramStr.getBytes(ENCODING);
|
byte[] hash = hash(srcData);
|
resultHexString = ByteUtils.toHexString(hash);
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
return resultHexString;
|
}
|
|
public static byte[] hash(byte[] srcData){
|
SM3Digest sm3Digest = new SM3Digest();
|
sm3Digest.update(srcData,0,srcData.length);
|
byte[] bytes = new byte[sm3Digest.getDigestSize()];
|
sm3Digest.doFinal(bytes,0);
|
return bytes;
|
}
|
|
/**
|
*
|
* @param str 明文
|
* @param hexString 密文
|
* @return 明文密文对比结果
|
*/
|
public static boolean verify(String str,String hexString){
|
boolean flag = false;
|
try {
|
byte[] srcData = str.getBytes(ENCODING);
|
byte[] sm3Hash = ByteUtils.fromHexString(hexString);
|
byte[] hash = hash(srcData);
|
if (Arrays.equals(hash,sm3Hash)){
|
flag = true;
|
}
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
return flag;
|
}
|
|
}
|