java sm3国密算法加密、验证工具类

由于本人并不专于算法和密码学,所以如果发现工具类存在问题或者可优化地方,欢迎评论处提出。
工具类也可以直接使用封装过的依赖:https://github.com/notsayyu/dsy-sm-cipher/packages/1332757

maven依赖

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on--><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.54</version></dependency>

完整代码

packagecom.example.pass.common.utils;importorg.bouncycastle.crypto.digests.SM3Digest;importorg.bouncycastle.jce.provider.BouncyCastleProvider;importorg.bouncycastle.pqc.math.linearalgebra.ByteUtils;importjava.io.UnsupportedEncodingException;importjava.security.Security;importjava.util.Arrays;/**  * @description:  * @author: dsy  * @date: 2021/2/25 14:39  */publicclassSm3Utils{privatestaticfinalString ENCODING="UTF-8";static{Security.addProvider(newBouncyCastleProvider());}/**      * sm3算法加密      *      * @param paramStr 待加密字符串      * @return 返回加密后,固定长度=32的16进制字符串      * @explain      */publicstaticStringencrypt(String paramStr){// 将返回的hash值转换成16进制字符串String resultHexString="";try{// 将字符串转换成byte数组byte[] srcData= paramStr.getBytes(ENCODING);// 调用hash()byte[] resultHash=hash(srcData);// 将返回的hash值转换成16进制字符串             resultHexString=ByteUtils.toHexString(resultHash);}catch(UnsupportedEncodingException e){             e.printStackTrace();}return resultHexString;}/**      * 返回长度=32的byte数组      *      * @param srcData      * @return      * @explain 生成对应的hash值      */publicstaticbyte[]hash(byte[] srcData){SM3Digest digest=newSM3Digest();         digest.update(srcData,0, srcData.length);byte[] hash=newbyte[digest.getDigestSize()];         digest.doFinal(hash,0);return hash;}/**      * 判断源数据与加密数据是否一致      *      * @param srcStr       原字符串      * @param sm3HexString 16进制字符串      * @return 校验结果      * @explain 通过验证原数组和生成的hash数组是否为同一数组,验证2者是否为同一数据      */publicstaticbooleanverify(String srcStr,String sm3HexString){boolean flag=false;try{byte[] srcData= srcStr.getBytes(ENCODING);byte[] sm3Hash=ByteUtils.fromHexString(sm3HexString);byte[] newHash=hash(srcData);if(Arrays.equals(newHash, sm3Hash)){                 flag=true;}}catch(UnsupportedEncodingException e){             e.printStackTrace();}return flag;}

测试

java sm3国密算法加密、验证工具类