资源简介

国密算法SM3(密码杂凑算法):javascript版+java版(支持中文,含例子源程序)
javascript使用:
var sm3= new SM3Digest();
var encryptValue = sm3.Encrypt("待加密的字符串,支持中文");
//encryptValue 为加密后的字符串
java使用:
//1、无key方式
String returnValue = SM3.encrypt("待加密的字符串,支持中文");
//returnValue 为加密后的字符串
//2、有key方式
String returnValue = SM3.encrypt("待加密的字符串,支持中文","我的key信息");
//returnValue 为加密后的字符串

//验证1、无key方式
boolean flag = SM3.vertify("待加密的字符串,支持中文", returnValue );
//验证2、有key方式
boolean flag = SM3.vertify("待加密的字符串,支持中文", returnValue, "我的key信息");
文件包里有详细例子说明。

本资源来源于网络,本人二次修改加工处理,更方便使用。

资源截图

代码片段和文件信息


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;
}

public static String encrypt(String paramStrString key) {
//将返回的hash值转换为16进制字符串
String resultHexString = ““;
try {
//将字符串转换成byte数组
byte[] srcData = paramStr.getBytes(ENCODING);
byte[] resultHash = hmac(srcDatakey.getBytes(ENCODING));
//将返回的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 boolean vertify(String srcStrString sm3HexStringString key){
boolean flag = false;
try {
byte[] srcData = srcStr.getBytes(ENCODING);
byte[] sm3Hash = ByteUtils.fromHexString(sm3HexString);
byte[] newHash = hmac(src

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-12-26 11:33  SM3_java\
     目录           0  2019-12-26 11:33  SM3_java\SM3\
     文件         441  2018-09-20 16:29  SM3_java\SM3\.classpath
     文件         379  2018-09-20 16:10  SM3_java\SM3\.project
     目录           0  2019-12-26 11:33  SM3_java\SM3\.settings\
     文件         598  2018-09-20 16:10  SM3_java\SM3\.settings\org.eclipse.jdt.core.prefs
     目录           0  2019-12-26 11:33  SM3_java\SM3\bin\
     文件        3129  2019-12-26 11:32  SM3_java\SM3\bin\SM3.class
     目录           0  2019-12-26 11:33  SM3_java\SM3\lib\
     文件     3330145  2018-09-20 16:29  SM3_java\SM3\lib\bcprov-jdk15on-1.57-sources.jar
     文件     3759724  2018-09-20 16:29  SM3_java\SM3\lib\bcprov-jdk15on-1.57.jar
     目录           0  2019-12-26 11:33  SM3_java\SM3\src\
     文件        4262  2019-12-26 11:51  SM3_java\SM3\src\SM3.java
     文件      103677  2018-07-10 17:12  SM3密码杂凑算法.pdf
     目录           0  2018-09-20 17:02  sm3js\
     目录           0  2019-12-26 11:29  sm3js\sm3js\
     目录           0  2019-12-26 11:30  sm3js\sm3js\js\
     文件       29182  2017-03-22 15:43  sm3js\sm3js\js\cipher-core.js
     文件       85796  2019-12-26 10:19  sm3js\sm3js\js\core.js
     文件       33903  2019-12-26 10:13  sm3js\sm3js\js\jsbn.js
     文件       18651  2017-03-22 15:43  sm3js\sm3js\js\jsbn2.js
     文件       99283  2019-12-26 11:43  sm3js\sm3js\js\sm3.js
     文件          80  2019-12-26 11:31  sm3js\sm3js\js\说明.txt
     文件        1035  2019-12-26 11:48  sm3js\sm3js\sm3-test.html

评论

共有 条评论