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

2022年10月2日09:17:31

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国密算法加密、验证工具类

  • 作者:not_say
  • 原文链接:https://blog.csdn.net/not_say/article/details/114083760
    更新时间:2022年10月2日09:17:31 ,共 1929 字。