AES加密解密全流程演示__api基础使用
AES(Advanced Encryption Standard)即高级加密标准,是一种广泛使用的对称加密算法,由美国国家标准与技术研究院(NIST)于2001年发布,用于保护电子数据的机密性。AES算法是替代原先DES(数据加密标准)算法的,因为它提供了更高的安全性。AES加密过程是可逆的,意味着使用相同的密钥可以解密加密的数据。
-
密钥长度:AES支持三种长度的密钥:128位、192位和256位。密钥长度越长,加密过程就越复杂,破解难度也相应增加。
-
块大小:AES以固定长度的块(称为状态)作为加密单位,每个块的大小为128位(即16字节)。无论输入数据的大小如何,它都会被处理成这些固定大小的块。
-
工作模式:AES可以通过不同的工作模式来适应不同的应用场景,如ECB(电子密码本模式)、CBC(密码块链接模式)、CFB(密码反馈模式)、OFB(输出反馈模式)和CTR(计数器模式)等。每种模式都有其特定的用途和安全性考虑。
-
高效性:AES算法设计得非常高效,能够在软件和硬件上快速执行,使其成为许多加密应用的首选算法。
public static void main(String[] args) throws Exception {
// 共同约定秘钥和加密算法
String content = "你好,世界";
// AES密钥长度通常为128、192或256位
String key = "1234567812345678"; // 16字节*8
String algorithm = "AES";
System.out.println("\n-----------发送方-----------\n");
Cipher cipher = Cipher.getInstance(algorithm);
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), algorithm);
// 加密模式
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encryptBytes = cipher.doFinal(content.getBytes());
String encryptText = new String(Base64.getEncoder().encode(encryptBytes)); // 密文
System.out.println(encryptText);
System.out.println("\n-----------接收方-----------\n");
Cipher recieverCipher = Cipher.getInstance(algorithm);
SecretKeySpec receiverSk = new SecretKeySpec(key.getBytes(), algorithm);
// 解密模式
recieverCipher.init(Cipher.DECRYPT_MODE, receiverSk);
// 先将加密后的字符串解码回字节数据
byte[] decodedBytes = Base64.getDecoder().decode(encryptText);
byte[] plainBytes = recieverCipher.doFinal(decodedBytes);
String plainText = new String(plainBytes); // 原文
System.out.println(plainText);
}