项目改造,升级用户登录中密码的加密方式,由MD5改为SM3方式。
使用jar包:bcprov-jdk18on-1.77.jar
使用类:BcSm3Util.java
SM3
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.util.encoders.Hex;
import java.security.MessageDigest;
import java.security.Security;
/**
* sm3加密方法
*/
public class BcSm3Util {
static {
Security.addProvider(new BouncyCastleProvider());
}
public static byte[] sm3(byte[] srcData) {
SM3Digest sm3Digest = new SM3Digest();
sm3Digest.update(srcData, 0, srcData.length);
byte[] hash = new byte[sm3Digest.getDigestSize()];
sm3Digest.doFinal(hash, 0);
return hash;
}
public static String sm3Hex(byte[] srcData) {
byte[] hash = sm3(srcData);
String hexString = org.apache.commons.codec.binary.Hex.encodeHexString(hash);
return hexString;
}
public static byte[] hmacSm3(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[] hash = new byte[mac.getMacSize()];
mac.doFinal(hash, 0);
return hash;
}
public static String hmacSm3Hex(byte[] key, byte[] srcData) {
byte[] hash = hmacSm3(key, srcData);
String hexString = org.apache.commons.codec.binary.Hex.encodeHexString(hash);
return hexString;
}
public static byte[] sm3bc(byte[] srcData) throws Exception {
MessageDigest messageDigest = MessageDigest.getInstance("SM3", "BC");
byte[] digest = messageDigest.digest(srcData);
return digest;
}
public static String sm3bcHex(byte[] srcData) throws Exception {
byte[] hash = sm3bc(srcData);
String hexString = org.apache.commons.codec.binary.Hex.encodeHexString(hash);
return hexString;
}
/**
* 获取SM3加密结果字符串
*
* @param srcData
* @return
* @throws Exception
*/
public static String getSM3ofStr(String srcData) {
System.out.println("getSM3ofStr加密--进入参数>>>>>>>>" + srcData);
SM3Digest digest = new SM3Digest();
byte[] input = srcData.getBytes();
digest.update(input, 0, input.length);
byte[] result = new byte[digest.getDigestSize()];
digest.doFinal(result, 0);
String digestHex = Hex.toHexString(result);
System.out.println("getSM3ofStr加密--进入结果>>>>>>>>>>>>>>>>" + digestHex);
return digestHex;
}
public static void main(String[] args) {
String message = "password";
String digestHex = BcSm3Util.getSM3ofStr(message);
System.out.println("加密后-->" + digestHex);
}