一些简单工具类
AES算法工具类:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.18</version>
</dependency>
扒拉过去直接使用:
/**
* @author zqh
*/
public class AESUtil {
/** 加密
* @param encryptKey 密钥
* @param content 加密内容
* @return
*/
public static String encryptAES(String encryptKey, String content){
String finalKey = toMakeKey(encryptKey, 16, "0");
SymmetricCrypto aes = getAES(finalKey);
byte[] encryptContent = aes.encrypt(content);
String encode = Base64.encode(encryptContent);
return encode;
}
/** AES解密
* @param encryptKey 密钥
* @param content Base64编码的解密内容
* @return 原文
*/
public static String decryptAES(String encryptKey, String content) {
String finalKey = toMakeKey(encryptKey, 16, "0");
SymmetricCrypto aes = getAES(finalKey);
byte[] decodeBytes = Base64.decode(content);
byte[] decrypt = aes.decrypt(decodeBytes);
return new String(decrypt, Charset.forName("UTF-8"));
}
private static SymmetricCrypto getAES(String encryptKey) {
byte[] encodedKey = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue(), encryptKey.getBytes(StandardCharsets.UTF_8)).getEncoded();
return new SymmetricCrypto(SymmetricAlgorithm.AES, encodedKey);
}
/**
* 密钥key ,默认补的数字,补全16位数,以保证安全补全至少16位长度,android和ios对接通过
* @param key 密钥key
* @param length 密钥应有的长度
* @param text 默认补的文本
* @return 密钥
*/
private static String toMakeKey(String key, int length, String text) {
// 获取密钥长度
int strLen = key.length();
// 判断长度是否小于应有的长度
if (strLen < length) {
// 补全位数
StringBuilder builder = new StringBuilder();
// 将key添加至builder中
builder.append(key);
// 遍历添加默认文本
for (int i = 0; i < length - strLen; i++) {
builder.append(text);
}
// 赋值
key = builder.toString();
}else {
key = key.substring(0,16);
}
return key;
}
public static void main(String[] args) {
String content = "1";
String key = "appiron";
String encryptAES = encryptAES(key, content);
String decryptAES = decryptAES(key, encryptAES);
System.out.println(decryptAES);
}
}
/**
* @author zqh
*/
public class Sha1Util {
private static final String MAC_NAME = "HmacSHA1";
private static final String ENCODING = "UTF-8";
public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey) {
byte[] data;
try {
data = encryptKey.getBytes(ENCODING);
// 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);
// 生成一个指定 Mac 算法 的 Mac 对象
Mac mac = Mac.getInstance(MAC_NAME);
// 用给定密钥初始化 Mac 对象
mac.init(secretKey);
byte[] text = encryptText.getBytes(ENCODING);
// 完成 Mac 操作
return mac.doFinal(text);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
return null;
}
}
RSA解密
<dependency>
<groupId>org