AES/GCM/NoPadding加解密

项目在应用Sonar扫描后,为提高安全性,将原有的AES加密方式改为AES/GCM/NoPadding模式。以下是调整后的详细Java代码实现,包括加密和解密过程。参考了优快云上两篇博客文章进行详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目使用sonar后,提示AES加密不安全,推荐使用AES/GCM/NoPadding,调整后的完整代码

  private static final String KEY_ALGORITHM_AES = "AES";
  private static final String DEFAULT_CIPHER_ALGORITHM = "AES/GCM/NoPadding";
  private static final String CHARSET = "UTF-8";

  /**
   * 加密
   * @param content
   * @param encryptPass
   * @return
   */
  public static String aesEncrypt(String content, String encryptPass) {
   
    try {
   
      byte[] iv = new byte[12];
      SecureRandom secureRandom = new SecureRandom();
      secureRandom.nextBytes(iv);
      byte[] contentBytes = content.getBytes(CHARSET);
      Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM
Java中,加密AES(高级加密标准)是一种常见的安全操作,而GCM( Galois/Counter Mode)是AES的一个模式,用于同时提供数据加密和认证。当你想要解密一个使用AES/GCM/256加密的数据包时,通常会涉及以下步骤: 1. **导入依赖**:首先,你需要在你的项目中添加支持AES/GCM的库,如Bouncy Castle,因为Java标准库本身并不包含对GCM的支持。 ```java import org.bouncycastle.jce.provider.BouncyCastleProvider; Security.addProvider(new BouncyCastleProvider()); ``` 2. **加载密钥材料**:确保你拥有正确的密钥(Key)、初始化向量(IV),以及加密后的数据。密钥通常是`byte[]`形式。 3. **创建cipher对象**:使用`Cipher.getInstance("AES/GCM/NoPadding")`,这里NoPadding表示使用无填充的模式,因为GCM已经包含了前导零填充的功能。 4. **初始化cipher**:将密钥和初始化向量传递给cipher的实例化方法,并设置模式为解密(`Cipher.DECRYPT_MODE`)。 ```java Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding"); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, "AES"), new GCMParameterSpec(128, iv)); ``` 这里的`128`是GCM的Tag长度(也可以自定义),`iv`是接收方的初始化向量。 5. **解密数据**:现在你可以使用cipher的`doFinal()`方法解密数据了。 ```java byte[] decryptedData = cipher.doFinal(encryptedData); ``` 6. **验证完整性**:如果你使用的是GCM模式,还需要检查返回的标签(Tag),以确认数据在传输过程中未被篡改。如果标签校验失败,则说明数据已被破坏。 请注意,以上代码仅是一个示例,实际使用时需要处理可能出现的异常,例如`InvalidKeyException`、`BadPaddingException`等。另外,为了安全性,你应该避免在代码中硬编码密钥和IV,而是通过安全的方式存储和管理它们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值