Java中实现‌‌AES算法介绍、应用场景和示例代码

概述

AES(Advanced Encryption Standard)是一种对称加密算法,广泛应用于数据加密和保护敏感信息。AES以其安全性和高效性成为现代加密标准的主流选择。

AES算法概述

  1. 基本原理

    • AES使用对称密钥加密,即加密和解密使用相同的密钥。
    • 它处理固定大小的块(128位),并支持多种密钥长度:128位、192位和256位。
    • 加密过程包括多个轮次的字节替换、行移位、列混淆和轮密钥加等操作。
  2. 加密过程

    • 将明文分成128位块,并用密钥进行多轮变换,生成密文。
  3. 解密过程

    • 将密文分成128位块,使用相同的密钥反向进行多轮变换,恢复明文。

应用场景

  • 数据保护:保护存储在数据库中的敏感信息,如密码、信用卡信息等。
  • 通信安全:在网络传输中加密敏感数据,如SSL/TLS协议中的数据加密。
  • 文件加密:对文件进行加密,以保护文件的机密性。

Java中的AES示例代码

以下是一个使用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 AesExample {
    private static final String ALGORITHM = "AES";
    private static final String TRANSFORMATION = "AES/CBC/PKCS5Padding";

    public static void main(String[] args) {
        try {
            // 生成密钥
            KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM);
            keyGen.init(128); // 可以选择128、192或256位
            SecretKey secretKey = keyGen.generateKey();
            byte[] key = secretKey.getEncoded();

            // 原始数据
            String originalData = "Hello, AES!";
            
            // 加密
            String encryptedData = encrypt(originalData, key);
            System.out.println("加密后的数据: " + encryptedData);

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

    public static String encrypt(String data, byte[] key) throws Exception {
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        SecretKeySpec secretKeySpec = new SecretKeySpec(key, ALGORITHM);

        // 初始化向量
        byte[] iv = new byte[16]; // AES块大小
        IvParameterSpec ivParams = new IvParameterSpec(iv);

        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParams);
        byte[] encryptedBytes = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encryptedBytes);
    }

    public static String decrypt(String encryptedData, byte[] key) throws Exception {
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        SecretKeySpec secretKeySpec = new SecretKeySpec(key, ALGORITHM);

        // 初始化向量
        byte[] iv = new byte[16]; // AES块大小
        IvParameterSpec ivParams = new IvParameterSpec(iv);

        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParams);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
        return new String(decryptedBytes);
    }
}

代码说明

  1. 密钥生成

    • 使用KeyGenerator生成AES密钥,指定密钥长度(128、192或256位)。
  2. 加密过程

    • 使用Cipher类进行加密,初始化为加密模式,使用生成的密钥和初始化向量(IV)。
  3. 解密过程

    • 重新初始化Cipher为解密模式,使用相同的密钥和IV对密文进行解密。
  4. Base64编码

    • 将加密后的字节数组转换为Base64字符串,以便于展示和存储。

总结

AES是一种高效且安全的对称加密算法,广泛应用于数据保护、通信安全和文件加密等场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值