hutool加解密包demo
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SmUtil;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
public class Test123 {
/**
* 加密
* @param key 国密4 key
* @param str 待加密字符串
* @return
*/
public static String encrypt(String key, String str){
String encrypt_str = SmUtil.sm4(StrUtil.utf8Bytes(key)).encryptHex(str);
System.out.println("加密后的数据:" + encrypt_str);
return encrypt_str;
}
/**
* 解密
* @param key 国密4 key
* @param str 待解密字符串
*/
public static String decrypt(String key, String str){
String decrypt_str = SmUtil.sm4(StrUtil.utf8Bytes(key)).decryptStr(str);
System.out.println("解密后的数据:" + decrypt_str);
return decrypt_str;
}
/**
* 动态生成16位不重复随机数
*
* @return
*/
public synchronized static String generate16() {
StringBuffer stringBuffer = new StringBuffer();
String date = getDateyyyyMMddNone();
String seconds = getDateHHmmssNone();
stringBuffer.append(date).append(generate2()).append(seconds);
return stringBuffer.toString();
}
private static String getDateyyyyMMddNone() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String fd = sdf.format(date);
return fd;
}
private static String getDateHHmmssNone() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("HHmmss");
String fd = sdf.format(date);
return fd;
}
/**
* 随机创建2位ID
*
* @return String 2位随机数ID
*/
private synchronized static String generate2() {
Random rad = new Random();
String result = rad.nextInt(100) + "";
if (result.length() == 1) {
result = "0" + result;
}
return result;
}
/**
* 动态生成16位随机数(包含大小写字母和数字)
*
* @return
*/
public static String generate16_2 (){
int len = 16;
int f =0;
char[] pwd = new char[len];
for(int i = 0 ; i<len;i++){
//随机生成0,1,2三个数中的一个f,作为判断条件
f = (int)(Math.random()*3);
if(f==0){
//生成0-9之间的随机数字
pwd[i] = (char)('0'+Math.random()*10);
}else if(f==1){
//随机生成一个小写字母
pwd[i] = (char)('a'+ Math.random()*26);
}else
//随机生成一个大写字母
pwd[i] =(char)('A'+Math.random()*26);
}
return new String(pwd);
}
public static void main(String[] args) {
//国密4 key必须是16位
String key = "1234567890123456";
key = generate16_2();
System.out.println("加密key:" + key);
//待加密字符串
String str = "123";
String encrypt_str = encrypt(key, str);
String decrypt_str = decrypt(key, encrypt_str);
}
}
SHA-1加密
public class SHA1Utils {
public SHA1Utils() {
}
public static String encrypt(String str) {
String result = "";
try {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.update(str.getBytes("UTF-8"));
byte[] messageDigest = digest.digest();
StringBuffer hexString = new StringBuffer();
for(int i = 0; i < messageDigest.length; ++i) {
String shaHex = Integer.toHexString(messageDigest[i] & 255);
if (shaHex.length() < 2) {
hexString.append(0);
}
hexString.append(shaHex);
}
result = hexString.toString();
return result;
} catch (NoSuchAlgorithmException var7) {
var7.printStackTrace();
} catch (UnsupportedEncodingException var8) {
var8.printStackTrace();
}
return result;
}
}