資源簡介
國密最全 sm2 sm3 sm4 JavaScript版本 js版本 java版本 c版本 來源與github csdn other 省積分
代碼片段和文件信息
import?java.io.UnsupportedEncodingException;
import?java.security.Security;
import?java.util.Arrays;
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;
public?class?SM3?{
private?static?final?String?ENCODING?=?“UTF-8“;
static?{
Security.addProvider(new?BouncyCastleProvider());
}
/**
?*?SM3加密
?*?@param?paramStr 待加密字符串
?*?@return 返回加密后,固定長度=32的16進制字符串
?*/
public?static?String?encrypt(String?paramStr)?{
//將返回的hash值轉換為16進制字符串
String?resultHexString?=?““;
try?{
//將字符串轉換成byte數組
byte[]??srcData?=?paramStr.getBytes(ENCODING);
byte[]?resultHash?=?hash(srcData);
//將返回的hash值轉換成16進制字符串
resultHexString?=?ByteUtils.toHexString(resultHash);
}?catch?(UnsupportedEncodingException?e)?{
e.printStackTrace();
}
return?resultHexString;
}
/**
?*?返回長度為32的byte數組
?*?生成對應的hash值
?*?@param?srcData
?*?@return
?*/
public?static?byte[]?hash(byte[]?srcData){
SM3Digest?digest?=?new?SM3Digest();
digest.update(srcData0srcData.length);
byte[]?hash?=?new?byte[digest.getDigestSize()];
digest.doFinal(hash?0);
return?hash;
}
/**
?*?通過指定密鑰進行加密
?*?@param?key?密鑰
?*?@param?srcData?被加密的byte數組
?*?@return
?*/
public?static?byte[]?hmac(byte[]?keybyte[]?srcData){
KeyParameter?keyParameter?=?new?KeyParameter(key);
SM3Digest?digest?=?new?SM3Digest();
HMac?mac?=?new?HMac(digest);
mac.init(keyParameter);
mac.update(srcData0srcData.length);
byte[]?result?=?new?byte[mac.getMacSize()];
mac.doFinal(result?0);
return?result;
}
/**
?*?判斷數據源與加密數據是否一致,通過驗證原數組和生成是hash數組是否為同一數組,驗證二者是否為同一數據
?*?@param?srcStr
?*?@param?sm3HexString
?*?@return
?*/
public?static?boolean?vertify(String?srcStrString?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;
}
public?static?void?main(String[]?args){
//測試
String?str?=?“412345195604153562“;
String?hex?=?SM3.encrypt(str);
System.out.println(hex);
String?str1?=?“1234“;
String?hex1?=?SM3.encrypt(str1);
System.out.println(hex1);
String?str2?=?“qwer12345“;
String?hex2?=?SM3.encrypt(str2);
System.out.println(hex2);
String?strpre?=?“412727“;
String?hexpre?=?SM3.encrypt(strpre);
System.out.println(hexpre);
//驗證加密后的16進制字符串與加密前的字符串是否相同
boolean?flag?=?SM3.vertify(str?hex);
System.out.println(flag);
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-04-30?08:52??最全國密算法\
?????目錄???????????0??2019-02-21?17:46??最全國密算法\js?和java?的sm3加密\
?????文件?????6447396??2019-04-26?09:24??最全國密算法\js?和java?的sm3加密.zip
?????文件??????103677??2018-07-10?17:12??最全國密算法\js?和java?的sm3加密\302a3ada057c4a73830536d03e683110.pdf
?????目錄???????????0??2019-02-21?17:45??最全國密算法\js?和java?的sm3加密\sm3js_\
?????目錄???????????0??2019-02-21?17:45??最全國密算法\js?和java?的sm3加密\sm3js_\sm3js\
?????目錄???????????0??2019-02-21?17:45??最全國密算法\js?和java?的sm3加密\sm3js_\sm3js\js\
?????文件???????29182??2017-03-22?15:43??最全國密算法\js?和java?的sm3加密\sm3js_\sm3js\js\cipher-core.js
?????文件???????21468??2017-03-22?15:43??最全國密算法\js?和java?的sm3加密\sm3js_\sm3js\js\core.js
?????文件???????15248??2017-03-22?15:43??最全國密算法\js?和java?的sm3加密\sm3js_\sm3js\js\jsbn.js
?????文件???????18651??2017-03-22?15:43??最全國密算法\js?和java?的sm3加密\sm3js_\sm3js\js\jsbn2.js
?????文件???????13008??2017-04-09?01:00??最全國密算法\js?和java?的sm3加密\sm3js_\sm3js\js\sm3.js
?????文件????????1579??2018-11-15?18:51??最全國密算法\js?和java?的sm3加密\sm3js_\sm3js\sm3-test.html
?????文件??????208896??2018-09-20?11:43??最全國密算法\js?和java?的sm3加密\SM3_Calc_.exe
?????目錄???????????0??2019-02-21?17:45??最全國密算法\js?和java?的sm3加密\SM3_java_\
?????目錄???????????0??2019-02-21?17:45??最全國密算法\js?和java?的sm3加密\SM3_java_\SM3\
?????文件?????????441??2018-09-20?16:29??最全國密算法\js?和java?的sm3加密\SM3_java_\SM3\.classpath
?????文件?????????379??2018-09-20?16:10??最全國密算法\js?和java?的sm3加密\SM3_java_\SM3\.project
?????目錄???????????0??2019-02-21?17:45??最全國密算法\js?和java?的sm3加密\SM3_java_\SM3\.settings\
?????文件??????????57??2018-11-12?14:14??最全國密算法\js?和java?的sm3加密\SM3_java_\SM3\.settings\org.eclipse.core.resources.prefs
?????文件?????????598??2018-09-20?16:10??最全國密算法\js?和java?的sm3加密\SM3_java_\SM3\.settings\org.eclipse.jdt.core.prefs
?????目錄???????????0??2019-02-21?17:45??最全國密算法\js?和java?的sm3加密\SM3_java_\SM3\bin\
?????文件????????3132??2018-11-15?17:35??最全國密算法\js?和java?的sm3加密\SM3_java_\SM3\bin\SM3.class
?????目錄???????????0??2019-02-21?17:45??最全國密算法\js?和java?的sm3加密\SM3_java_\SM3\lib\
?????文件?????3330145??2018-09-20?16:29??最全國密算法\js?和java?的sm3加密\SM3_java_\SM3\lib\bcprov-jdk15on-1.57-sources.jar
?????文件?????3759724??2018-09-20?16:29??最全國密算法\js?和java?的sm3加密\SM3_java_\SM3\lib\bcprov-jdk15on-1.57.jar
?????目錄???????????0??2019-02-21?17:45??最全國密算法\js?和java?的sm3加密\SM3_java_\SM3\src\
?????文件????????3174??2018-11-12?14:22??最全國密算法\js?和java?的sm3加密\SM3_java_\SM3\src\SM3.java
?????文件???????55398??2019-04-26?10:56??最全國密算法\js-spark-md5-master.zip
?????文件??????434136??2019-04-28?15:01??最全國密算法\SM2-master?(1).zip
?????文件??????434136??2019-04-28?14:59??最全國密算法\SM2-master.zip
............此處省略83個文件信息
評論
共有 條評論