SM3加密
This commit is contained in:
parent
a210d5734d
commit
2853ad43f5
|
|
@ -0,0 +1,105 @@
|
||||||
|
package com.securitycontrol.common.core.utils.aes;
|
||||||
|
|
||||||
|
import org.bouncycastle.crypto.digests.SM3Digest;
|
||||||
|
import org.bouncycastle.crypto.macs.HMac;
|
||||||
|
import org.bouncycastle.crypto.params.KeyParameter;
|
||||||
|
import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class Sm3Utils {
|
||||||
|
|
||||||
|
private static final String ENCODING = "UTF-8";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 不提供密钥
|
||||||
|
* sm3算法加密
|
||||||
|
* @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数组
|
||||||
|
* 生成对应的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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过密钥进行加密
|
||||||
|
* 指定密钥进行加密
|
||||||
|
* @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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断源数据与加密数据是否一致
|
||||||
|
* 通过验证原数组和生成的hash数组是否为同一数组,验证两者是否为同意数据
|
||||||
|
* @param srcStr 源字符串
|
||||||
|
* @param sm3HexString 16进制字符串
|
||||||
|
* @return 校验结构
|
||||||
|
*/
|
||||||
|
public static boolean verify(String srcStr,String sm3HexString) {
|
||||||
|
|
||||||
|
boolean flag = false;
|
||||||
|
try {
|
||||||
|
//原字符串
|
||||||
|
byte[] srcData = srcStr.getBytes(ENCODING);
|
||||||
|
//16进制转为数组
|
||||||
|
byte[] sm3Hash = ByteUtils.fromHexString(sm3HexString);
|
||||||
|
//通过摘要加密生成新的hash数组
|
||||||
|
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= encrypt("123456");
|
||||||
|
String sm3="207cf410532f92a47dee245ce9b11ff71f578ebd763eb3bbea44ebd043d018fb";
|
||||||
|
boolean tf=str.equalsIgnoreCase(sm3);
|
||||||
|
System.out.println(str);
|
||||||
|
System.out.println(tf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.securitycontrol.background.controller;
|
package com.securitycontrol.background.controller;
|
||||||
|
|
||||||
|
import com.securitycontrol.common.core.utils.aes.Sm3Utils;
|
||||||
import com.securitycontrol.common.core.web.domain.AjaxResult;
|
import com.securitycontrol.common.core.web.domain.AjaxResult;
|
||||||
import com.securitycontrol.common.security.utils.SecurityUtils;
|
import com.securitycontrol.common.security.utils.SecurityUtils;
|
||||||
import com.securitycontrol.entity.background.vo.VerifyPwdVo;
|
import com.securitycontrol.entity.background.vo.VerifyPwdVo;
|
||||||
|
|
@ -24,19 +25,15 @@ public class VerifyController {
|
||||||
|
|
||||||
@PostMapping("verifyPwd")
|
@PostMapping("verifyPwd")
|
||||||
public AjaxResult verifyPwd(@RequestBody VerifyPwdVo vo){
|
public AjaxResult verifyPwd(@RequestBody VerifyPwdVo vo){
|
||||||
if(StringUtils.isBlank(vo.getPassword()) || vo.getUserId() == null){
|
if(StringUtils.isBlank(vo.getPassword())){
|
||||||
return AjaxResult.error("参数不完整");
|
return AjaxResult.error("参数不完整");
|
||||||
}
|
}
|
||||||
if(SecurityUtils.getLoginUser()!=null && SecurityUtils.getLoginUser().getSysUser()!=null){
|
String encryptPwd = Sm3Utils.encrypt("tyxy@1226");
|
||||||
String password = SecurityUtils.getLoginUser().getSysUser().getPassword();
|
if(Objects.equals(encryptPwd,vo.getPassword())){
|
||||||
Long userId = SecurityUtils.getLoginUser().getSysUser().getUserId();
|
|
||||||
if(Objects.equals(userId,vo.getUserId()) && SecurityUtils.matchesPassword(vo.getPassword(),password)){
|
|
||||||
return AjaxResult.success("密码正确");
|
return AjaxResult.success("密码正确");
|
||||||
}else{
|
}else{
|
||||||
return AjaxResult.error("密码错误");
|
return AjaxResult.error("密码错误");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return AjaxResult.success("密码错误");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue