AES(高级加密标准)是一种广泛使用的对称加密算法,适用于数据的加密和解密。在Java中,我们可以使用Java Cryptography Architecture (JCA)来实现AES加密和解密。下面将介绍如何在Java中实现AES加密和解密,并提供完整的代码示例。

AES加密与解密的步骤

  1. 生成密钥:AES密钥通常为128位、192位或256位。
  2. 初始化Cipher对象:选择加密算法和模式。
  3. 加密数据:使用密钥和Cipher对象对数据进行加密。
  4. 解密数据:使用相同的密钥对数据进行解密。

代码示例

下面是一个完整的Java示例,展示了如何使用AES算法进行加密和解密。

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.spec.IvParameterSpec;
import java.util.Base64;

public class AESCryptography {

    private static final String ALGORITHM = "AES";
    private static final String TRANSFORMATION = "AES/CBC/PKCS5Padding";
    private static final String IV = "1234567890123456"; // 16 bytes for AES

    // 生成密钥
    public static SecretKey generateKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);
        keyGenerator.init(128); // 密钥长度可为128, 192, 256
        return keyGenerator.generateKey();
    }

    // 加密
    public static String encrypt(String data, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        IvParameterSpec ivParams = new IvParameterSpec(IV.getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, key, ivParams);
        byte[] encryptedBytes = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    // 解密
    public static String decrypt(String encryptedData, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        IvParameterSpec ivParams = new IvParameterSpec(IV.getBytes());
        cipher.init(Cipher.DECRYPT_MODE, key, ivParams);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
        return new String(decryptedBytes);
    }

    public static void main(String[] args) {
        try {
            String originalData = "Hello, AES Encryption!";

            // 生成密钥
            SecretKey secretKey = generateKey();

            // 加密
            String encryptedData = encrypt(originalData, secretKey);
            System.out.println("加密后的数据: " + encryptedData);

            // 解密
            String decryptedData = decrypt(encryptedData, secretKey);
            System.out.println("解密后的数据: " + decryptedData);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

代码解析

  1. 生成密钥:使用KeyGenerator生成一个128位的AES密钥。
  2. 加密方法:通过Cipher对象进行数据加密。使用CBC模式和PKCS5填充, 并通过IvParameterSpec设置初始化向量(IV)。加密后的数据通过Base64编码为字符串。
  3. 解密方法:解密过程与加密类似,先创建Cipher对象并初始化为解密模式,解密后再将Base64编码的数据转换为字符串。

重要提示

  • 加密密钥必须安全存储,泄露可能导致数据被未经授权访问。
  • IV的长度对AES加密算法至关重要,必须是16字节。
  • 在实际应用中,对于密钥管理和IV生成,应该采用符合安全标准的方法,不要硬编码到代码中。

结论

上述代码示例展示了如何在Java中使用AES算法进行数据的加密和解密。AES加密是一种强有力的加密方法,广泛应用于数据保护领域。希望通过这个示例,您能够更好地理解AES加密和解密的基本概念及实现方法。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部