TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码

Java实现AES加密解密的完整指南:从原理到实战

2025-07-14
/
0 评论
/
4 阅读
/
正在检测是否收录...
07/14


一、AES算法核心原理

AES(Advanced Encryption Standard)作为目前最流行的对称加密算法,采用分组加密技术,支持128、192和256三种密钥长度。其核心特点包括:

  1. 替代-置换网络(SPN)结构
  2. 多轮加密机制(10/12/14轮对应不同密钥长度)
  3. 128位固定分组大小
  4. 需配合加密模式(如CBC)使用

java // 密钥生成示例 KeyGenerator keyGen = KeyGenerator.getInstance("AES"); keyGen.init(256); // 指定密钥长度 SecretKey secretKey = keyGen.generateKey();

二、Java实现完整步骤

2.1 环境准备

确保使用JDK8及以上版本,无需额外依赖:

java import javax.crypto.*; import javax.crypto.spec.*; import java.util.Base64;

2.2 加密实现

java
public static String encrypt(String plaintext, SecretKey key, byte[] iv)
throws Exception {

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec);

byte[] ciphertext = cipher.doFinal(plaintext.getBytes());
return Base64.getEncoder().encodeToString(ciphertext);

}

关键参数说明
- CBC模式需要初始化向量(IV)
- PKCS5Padding提供标准填充方案
- 必须使用Base64编码处理二进制结果

2.3 解密实现

java
public static String decrypt(String ciphertext, SecretKey key, byte[] iv)
throws Exception {

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);

byte[] plaintext = cipher.doFinal(
    Base64.getDecoder().decode(ciphertext)
);
return new String(plaintext);

}

三、完整可运行示例

java
public class AESDemo {
public static void main(String[] args) throws Exception {
// 1. 生成密钥
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(256);
SecretKey key = keyGen.generateKey();

    // 2. 生成随机IV(16字节)
    byte[] iv = new byte[16];
    new SecureRandom().nextBytes(iv);

    // 3. 加密测试
    String original = "敏感数据123";
    String encrypted = encrypt(original, key, iv);
    System.out.println("加密结果: " + encrypted);

    // 4. 解密验证
    String decrypted = decrypt(encrypted, key, iv);
    System.out.println("解密结果: " + decrypted);
}

// 此处插入前文的encrypt/decrypt方法

}

四、关键注意事项

  1. IV管理:每次加密应使用不同IV,可明文传输但需确保唯一性
  2. 密钥存储:建议使用KeyStore或HSM保护密钥
  3. 模式选择

    • CBC需要IV且适合顺序数据
    • GCM模式提供认证功能(推荐新系统使用)
  4. 性能优化:重用Cipher实例(线程不安全需配合ThreadLocal)

java // GCM模式示例 Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); GCMParameterSpec spec = new GCMParameterSpec(128, iv);

五、实际应用建议

  1. 在HTTPS通信层之上补充加密
  2. 数据库字段加密时注意索引失效问题
  3. 结合HMAC实现加密+认证(Encrypt-then-MAC)
  4. 定期轮换密钥(建议不超过90天)

通过本文的代码示例,开发者可以快速集成AES加密到Java应用中。相比直接使用第三方库,原生实现提供了更灵活的定制空间,但务必注意遵循密码学最佳实践。

安全警示:自行实现加密算法存在风险,生产环境建议使用经过审计的库如Google Tink或Bouncy Castle。

密钥生成Java AES加密对称加密算法Cipher类IV向量
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/32754/(转载时请注明本文出处及文章链接)

评论 (0)