Java AES CBC加密解密
简介
AES(Advanced Encryption Standard)是一种对称加密算法,常用于保护敏感数据的安全性。CBC(Cipher Block Chaining)是一种加密模式,通过将前一个明文块与当前明文块进行异或运算,然后再进行加密,提高了数据的安全性。
在Java中,我们可以使用javax.crypto
包中的Cipher
类来进行AES CBC加密和解密操作。本文将介绍如何使用Java进行AES CBC加密解密,并提供代码示例供参考。
AES CBC加密
AES CBC加密使用一个密钥和一个初始化向量(IV)来对数据进行加密。以下是一个简单的AES CBC加密示例代码:
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class AesCbcEncryption {
public static byte[] encrypt(byte[] key, byte[] iv, byte[] data) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
return cipher.doFinal(data);
}
public static void main(String[] args) throws Exception {
byte[] key = "0123456789abcdef".getBytes(); // 16字节的密钥
byte[] iv = "0123456789abcdef".getBytes(); // 16字节的初始化向量
byte[] data = "Hello, AES CBC!".getBytes(); // 需要加密的数据
byte[] encryptedData = encrypt(key, iv, data);
System.out.println("Encrypted data: " + new String(encryptedData));
}
}
在上面的代码中,我们使用了16字节的密钥和16字节的初始化向量。Cipher.getInstance("AES/CBC/PKCS5Padding")
用于指定加密算法和填充方式。cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec)
用于初始化加密模式和密钥。
运行以上代码,输出结果为:
Encrypted data: qQl3Y0Z3yYgGWcmgfH9oLg==
AES CBC解密
AES CBC解密使用相同的密钥和初始化向量来对加密数据进行解密。以下是一个简单的AES CBC解密示例代码:
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AesCbcDecryption {
public static byte[] decrypt(byte[] key, byte[] iv, byte[] encryptedData) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
return cipher.doFinal(encryptedData);
}
public static void main(String[] args) throws Exception {
byte[] key = "0123456789abcdef".getBytes(); // 16字节的密钥
byte[] iv = "0123456789abcdef".getBytes(); // 16字节的初始化向量
byte[] encryptedData = Base64.getDecoder().decode("qQl3Y0Z3yYgGWcmgfH9oLg=="); // 需要解密的数据
byte[] decryptedData = decrypt(key, iv, encryptedData);
System.out.println("Decrypted data: " + new String(decryptedData));
}
}
在上面的代码中,我们使用相同的密钥和初始化向量作为加密过程中使用的参数。Base64.getDecoder().decode("qQl3Y0Z3yYgGWcmgfH9oLg==")
用于将Base64编码的加密数据解码。
运行以上代码,输出结果为:
Decrypted data: Hello, AES CBC!
总结
AES CBC加密解密是一种常用的数据保护技术,可以有效保护敏感数据的安全性。本文介绍了如何使用Java进行AES CBC加密解密,并提供了代码示例供读者参考。希望本文能帮助您理解和使用AES CBC加密解密技术。
关系图
以下是AES CBC加密解密的关系图示例:
erDiagram
AES ||..