• 大小: 6.14MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-30
  • 语言: Java
  • 标签: sm3  

资源简介

SM3国产加密JS版和JAVA版,直接可以使用。js版有使用方法。

资源截图

代码片段和文件信息

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  2018-09-20 17:02  sm3加密(js、java)\
     文件      103677  2018-07-10 17:12  sm3加密(js、java)\302a3ada057c4a73830536d03e683110.pdf
     目录           0  2018-09-20 17:02  sm3加密(js、java)\sm3js\
     目录           0  2018-09-20 17:02  sm3加密(js、java)\sm3js\sm3js\
     目录           0  2018-11-15 19:02  sm3加密(js、java)\sm3js\sm3js\js\
     文件       29182  2017-03-22 15:43  sm3加密(js、java)\sm3js\sm3js\js\cipher-core.js
     文件       21468  2017-03-22 15:43  sm3加密(js、java)\sm3js\sm3js\js\core.js
     文件       15248  2017-03-22 15:43  sm3加密(js、java)\sm3js\sm3js\js\jsbn.js
     文件       18651  2017-03-22 15:43  sm3加密(js、java)\sm3js\sm3js\js\jsbn2.js
     文件       13008  2017-04-09 01:00  sm3加密(js、java)\sm3js\sm3js\js\sm3.js
     文件        1579  2018-11-15 18:51  sm3加密(js、java)\sm3js\sm3js\sm3-test.html
     文件      208896  2018-09-20 11:43  sm3加密(js、java)\SM3_Calc.exe
     目录           0  2018-09-20 17:02  sm3加密(js、java)\SM3_java\
     目录           0  2018-09-20 16:28  sm3加密(js、java)\SM3_java\SM3\
     文件         441  2018-09-20 16:29  sm3加密(js、java)\SM3_java\SM3\.classpath
     文件         379  2018-09-20 16:10  sm3加密(js、java)\SM3_java\SM3\.project
     目录           0  2018-11-12 14:14  sm3加密(js、java)\SM3_java\SM3\.settings\
     文件          57  2018-11-12 14:14  sm3加密(js、java)\SM3_java\SM3\.settings\org.eclipse.core.resources.prefs
     文件         598  2018-09-20 16:10  sm3加密(js、java)\SM3_java\SM3\.settings\org.eclipse.jdt.core.prefs
     目录           0  2018-11-15 17:35  sm3加密(js、java)\SM3_java\SM3\bin\
     文件        3132  2018-11-15 17:35  sm3加密(js、java)\SM3_java\SM3\bin\SM3.class
     目录           0  2018-09-20 16:29  sm3加密(js、java)\SM3_java\SM3\lib\
     文件     3330145  2018-09-20 16:29  sm3加密(js、java)\SM3_java\SM3\lib\bcprov-jdk15on-1.57-sources.jar
     文件     3759724  2018-09-20 16:29  sm3加密(js、java)\SM3_java\SM3\lib\bcprov-jdk15on-1.57.jar
     目录           0  2018-09-20 16:29  sm3加密(js、java)\SM3_java\SM3\src\
     文件        3174  2018-11-12 14:22  sm3加密(js、java)\SM3_java\SM3\src\SM3.java

评论

共有 条评论