所需jar包:
bcprov-jdk15on-1.59.jar
commons-lang3-3.1.jar
20200901
对应的maven依赖
<!--sm3,sm4加密算法--> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.66</version> </dependency> importorg.bouncycastle.crypto.digests.SM3Digest; importorg.bouncycastle.crypto.macs.HMac; importorg.bouncycastle.crypto.params.KeyParameter; importorg.bouncycastle.jce.provider.BouncyCastleProvider; importorg.bouncycastle.pqc.math.linearalgebra.ByteUtils; importjava.io.UnsupportedEncodingException; importjava.security.Security; importjava.util.Arrays; /** *sm3加密算法工具类 *@explain加密与加密结果验证(不可逆算法) *@authorMarydon *@creationTime2018年7月5日上午10:01:24 *@version1.0 *@since *@emailmarydon20170307@163.com */ publicclassSm3Utils{ privatestaticfinalStringENCODING="UTF-8"; static{ Security.addProvider(newBouncyCastleProvider()); } }2.SM3加密
方式一:不提供密钥
/** *sm3算法加密 *@explain *@paramparamStr *待加密字符串 *@return返回加密后,固定长度=32的16进制字符串 */ publicstaticStringencrypt(StringparamStr){ //将返回的hash值转换成16进制字符串 StringresultHexString=""; try{ //将字符串转换成byte数组 byte[]srcData=paramStr.getBytes(ENCODING); //调用hash() byte[]resultHash=hash(srcData); //将返回的hash值转换成16进制字符串 resultHexString=ByteUtils.toHexString(resultHash); }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); } returnresultHexString; } /** *返回长度=32的byte数组 *@explain生成对应的hash值 *@paramsrcData *@return */ publicstaticbyte[]hash(byte[]srcData){ SM3Digestdigest=newSM3Digest(); digest.update(srcData,0,srcData.length); byte[]hash=newbyte[digest.getDigestSize()]; digest.doFinal(hash,0); returnhash; }方式二:自定义密钥
/** *通过密钥进行加密 *@explain指定密钥进行加密 *@paramkey *密钥 *@paramsrcData *被加密的byte数组 *@return */ publicstaticbyte[]hmac(byte[]key,byte[]srcData){ KeyParameterkeyParameter=newKeyParameter(key); SM3Digestdigest=newSM3Digest(); HMacmac=newHMac(digest); mac.init(keyParameter); mac.update(srcData,0,srcData.length); byte[]result=newbyte[mac.getMacSize()]; mac.doFinal(result,0); returnresult; }本文内容总结:1.准备工作,3.加密数据校验,4.测试,相关推荐:,
原文链接:https://www.cnblogs.com/Marydon20170307/p/9303233.html