使用Java实现AES加密算法
发布时间:2023-07-31 06:54:13
AES(Advanced Encryption Standard)是一种对称密钥加密算法,是目前应用广泛的对称加密算法之一。下面是使用Java实现AES加密算法的简单示例:
首先,需要导入Java中的相关包:
import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.SecureRandom;
然后,创建一个AESUtil工具类,用于加密和解密操作:
public class AESUtil {
private static final String DEFAULT_CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";
/**
* AES加密操作
*
* @param content 需要加密的内容
* @param key 加密密钥
* @param iv 初始化向量
* @return 返回Base64转码后的加密数据
*/
public static String encrypt(String content, String key, String iv) {
try {
// 创建AES的Key生产者
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128, new SecureRandom(key.getBytes()));
// 根据用户密码生成一个密钥
SecretKey secretKey = keyGenerator.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
// 根据指定的字节数组和算法构造一个密钥
SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
// 创建密码器
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes());
// 初始化加密器
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] byteContent = content.getBytes("utf-8");
byte[] result = cipher.doFinal(byteContent);
// 将加密后的数据转换成字符串并进行Base64编码
return Base64.encodeToString(result, Base64.DEFAULT);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* AES解密操作
*
* @param content 需要解密的内容
* @param key 解密密钥
* @param iv 初始化向量
* @return 返回解密后的数据
*/
public static String decrypt(String content, String key, String iv) {
try {
byte[] encrypted = Base64.decode(content, Base64.DEFAULT);
// 创建AES的Key生产者
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128, new SecureRandom(key.getBytes()));
// 根据用户密码生成一个密钥
SecretKey secretKey = keyGenerator.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
// 根据指定的字节数组和算法构造一个密钥
SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
// 创建密码器
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes());
// 初始化解密器
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] result = cipher.doFinal(encrypted);
return new String(result, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
接下来,可以在Java主程序中调用AESUtil进行加密和解密操作:
public class Main {
public static void main(String[] args) {
String content = "Hello, AES!";
String key = "1234567890abcdef";
String iv = "1234567890abcdef";
// 使用AESUtil进行加密
String encrypted = AESUtil.encrypt(content, key, iv);
System.out.println("加密后的内容:" + encrypted);
// 使用AESUtil进行解密
String decrypted = AESUtil.decrypt(encrypted, key, iv);
System.out.println("解密后的内容:" + decrypted);
}
}
以上就是使用Java实现AES加密算法的简单示例。当然,实际应用中可能需要更复杂的密钥管理机制,以及更严格的加解密流程。此示例提供了一个基本的框架,可以根据具体需求进行调整和优化。
