对称**密码体系 --- AES
程序员文章站
2024-03-14 14:46:58
...
/**
* 方法描述:一重解密
*
* @param keySeed 字节数组类型的**种子的字节
* @param decryptData 字节数组类型的待解密的数据
* @return 返回解密结果
*/
public byte[] decrypt(byte[] keySeed,byte[] decryptData){
return encryptOrDecrypt(Cipher.DECRYPT_MODE, keySeed, decryptData);
}
/**
* 方法描述:一重加密
*
* @param keySeed 字节数组类型的**种子的字节
* @param encryptData 字节数组类型的待加密的数据
* @return 返回加密结果
*/
public byte[] encrypt(byte[] keySeed,byte[] encryptData){
return encryptOrDecrypt(Cipher.ENCRYPT_MODE, keySeed, encryptData);
}
/**
* 方法描述:AES加密和解密的核心工具
*
* @param keySeed 字节数组类型的**种子的字节
* @param encryptData 字节数组类型的待加密或解密的数据
* @param encryptOrDecrypt 有两个可选值 Cipher.ENCRYPT_MODE(加密)
* 和 Cipher.DECRYPT_MODE(解密)
* @return 返回AES加密或解密结果
*/
private byte[] encryptOrDecrypt(int encryptOrDecrypt, byte[] keySeed,
byte[] encryptData){
if (keySeed != null && encryptData != null &&
(encryptOrDecrypt == Cipher.ENCRYPT_MODE ||
encryptOrDecrypt == Cipher.DECRYPT_MODE )){
SecretKeySpec secretKeySpec = generateKey(keySeed);
if (secretKeySpec != null){
try {
// 根据参数创建对应算法的 加密解密工具对象
Cipher cipher = Cipher.getInstance("AES");
// 初始化加密解密工具
// 参数一决定了工具是加密还是解密
cipher.init(encryptOrDecrypt,secretKeySpec);
// 开始加密或解密
return cipher.doFinal(encryptData);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace(); // 加密解密工具对象 创建失败
} catch (NoSuchPaddingException e) {
e.printStackTrace(); // 加密解密工具对象 创建失败
} catch (InvalidKeyException e) {
e.printStackTrace(); // 加密解密工具对象 初始化失败
} catch (BadPaddingException e) {
e.printStackTrace(); // 加密解密工具运行失败
} catch (IllegalBlockSizeException e) {
e.printStackTrace(); // 加密解密工具运行失败
}
}
}
return null;
}
/**
* 方法描述:根据**种子生成对应的**
*
* @param keySeed 字节数组类型的**种子的字节
* @return 用于AES加密解密的**对象
*/
private SecretKeySpec generateKey(byte[] keySeed){
if (keySeed !=null) {
try {
// 创建 **生成器
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
// 创建 **种子的随机数对象
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(keySeed);
// 利用 **种子的随机数对象 初始化出一个可以生成128位**的**生成器
keyGenerator.init(128, secureRandom);
// 生成**
SecretKey secretKey = keyGenerator.generateKey();
// 将刚生成的**转为AES专用的**
return new SecretKeySpec(secretKey.getEncoded(), "AES");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace(); // **生成器 创建失败
}
}
return null;
}
上一篇: 关于博客
下一篇: Mybatis框架的一点个人心得