国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Java sm3加密算法的實現

瀏覽:10日期:2022-08-22 13:27:51

1.準備工作

所需jar包:

bcprov-jdk15on-1.59.jarcommons-lang3-3.1.jar

對應的maven依賴

<!--sm3,sm4加密算法--><dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.66</version></dependency>

import org.bouncycastle.crypto.digests.SM3Digest;import org.bouncycastle.crypto.macs.HMac;import org.bouncycastle.crypto.params.KeyParameter;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;

/** * sm3加密算法工具類 * @explain 加密與加密結果驗證(不可逆算法) * @author Marydon * @creationTime 2018年7月5日上午10:01:24 * @version 1.0 * @since * @email marydon20170307@163.com */public class Sm3Utils { private static final String ENCODING = 'UTF-8'; static { Security.addProvider(new BouncyCastleProvider()); }} 

2.SM3加密

方式一:不提供密鑰

/** * sm3算法加密 * @explain * @param paramStr * 待加密字符串 * @return 返回加密后,固定長度=32的16進制字符串 */public static String encrypt(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數組 * @explain 生成對應的hash值 * @param srcData * @return */public static byte[] hash(byte[] srcData) { SM3Digest digest = new SM3Digest(); digest.update(srcData, 0, srcData.length); byte[] hash = new byte[digest.getDigestSize()]; digest.doFinal(hash, 0); return hash;}

方式二:自定義密鑰

/** * 通過密鑰進行加密 * @explain 指定密鑰進行加密 * @param key * 密鑰 * @param srcData * 被加密的byte數組 * @return */public static byte[] hmac(byte[] key, byte[] srcData) { KeyParameter keyParameter = new KeyParameter(key); SM3Digest digest = new SM3Digest(); HMac mac = new HMac(digest); mac.init(keyParameter); mac.update(srcData, 0, srcData.length); byte[] result = new byte[mac.getMacSize()]; mac.doFinal(result, 0); return result;}

3.加密數據校驗

/** * 判斷源數據與加密數據是否一致 * @explain 通過驗證原數組和生成的hash數組是否為同一數組,驗證2者是否為同一數據 * @param srcStr * 原字符串 * @param sm3HexString * 16進制字符串 * @return 校驗結果 */public static boolean verify(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;} 

4.測試

public static void main(String[] args) { // 測試二:json String json = '{'name':'Marydon','website':'http://www.cnblogs.com/Marydon20170307'}'; String hex = Sm3Utils.encrypt(json); System.out.println(hex);// 0b0880f6f2ccd817809a432420e42b66d3772dc18d80789049d0f9654efeae5c // 驗證加密后的16進制字符串與加密前的字符串是否相同 boolean flag = Sm3Utils.verify(json, hex); System.out.println(flag);// true}

以上就是Java sm3加密算法的實現的詳細內容,更多關于Java sm3加密算法的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 国产亚洲国产bv网站在线 | 日本一级毛片在线看 | 日本成aⅴ人片日本伦 | 欧美 亚洲 在线 | 欧美一级片网址 | 热99re久久精品这里都是免费 | 日本aaaa片毛片免费观看 | 免费一区区三区四区 | 男人天堂网在线观看 | 国产成人精品亚洲日本语音 | 69国产成人综合久久精品91 | 在线永久免费观看黄网站 | 久久91亚洲精品中文字幕奶水 | 九月婷婷亚洲综合在线 | 欧美一区二区在线免费观看 | 91亚洲国产成人久久精品网站 | 不卡午夜视频 | 欧美一二三 | 成人久久18免费网 | 国产成人精品久久一区二区三区 | 婷婷色九月综合激情丁香 | 99久久精品费精品国产一区二区 | 99久久国产综合精品国 | a级毛片毛片免费观看永久 a级毛片毛片免费很很综合 | 很黄很色的摸下面的视频 | 亚洲国产老鸭窝一区二区三区 | 精品亚洲视频在线观看 | 丁香久久| www.av日韩| 91欧美一区二区三区综合在线 | 99免费精品视频 | 99久久国产免费福利 | 欧美日韩国产人成在线观看 | 欧美一级www片免费观看 | 99精品视频观看 | 国产色视频一区二区三区 | 99久久久精品免费观看国产 | 一区二区视频在线 | 91久久精一区二区三区大全 | 国产色手机在线观看播放 | 狠色狠狠色狠狠狠色综合久久 |