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; } }