先采用sha256对密钥进行不可逆的哈希加密,生成256字节的密钥,然后将密钥和内容进行AES对称加密。
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
@Slf4j
public class EncryptionUtil {
/**
* 加密
*
* @param str 待解密字符串
* @param key 密钥
* @return 加密后的字符串
*/
public static String encrypt(String str, String key){
try {
if (str == null || key == null) return null;
byte[] keyBytes = MessageDigest.getInstance("SHA-256").digest(key.getBytes(StandardCharsets.UTF_8));
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyBytes, "AES"));
byte[] bytes = cipher.doFinal(str.getBytes(StandardCharsets.UTF_8));
return Base64.encodeBase64String(bytes);
} catch (Exception e) {
log.error("加密出现错误:{}", e.getMessage());
}
return null;
}
/**
* 解密
*
* @param str 待解密字符串
* @param key 密钥
* @return 解密后的字符串
*/
public static String decrypt(String str, String key){
try {
if (str == null || key == null) return null;
byte[] keyBytes = MessageDigest.getInstance("SHA-256").digest(key.getBytes(StandardCharsets.UTF_8));
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(keyBytes, "AES"));
byte[] bytes = Base64.decodeBase64(str);
bytes = cipher.doFinal(bytes);
return new String(bytes, StandardCharsets.UTF_8);
} catch (Exception e) {
log.error("解密出现错误:{}", e.getMessage());
}
return null;
}
}