Java AES加密

Java AES 加密

  1. 加密
    /**
     * 
     * @description 加密
     *
     * @param content 需要加密的内容
     * @param password 加密密码
     * @return
     */
    public static byte[] encrypt(String content, String password) {
        try {
            //创建AES密钥生成器
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
            //使用用户提供的随机源初始化此密钥生成器,使其具有确定的密钥长度
            keyGenerator.init(128, new SecureRandom(password.getBytes()));
            //生成一个密钥
            SecretKey secretKey = keyGenerator.generateKey();
            //编码的密钥,如果此密钥不支持编码,则返回 null
            byte[] enCodeFormat = secretKey.getEncoded();
            //根据给定的字节数组构造一个密钥
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
            // 创建密码器
            Cipher cipher = Cipher.getInstance("AES");
            byte[] byteContent = content.getBytes("utf-8");
            // 初始化
            cipher.init(Cipher.ENCRYPT_MODE, key);
            byte[] result = cipher.doFinal(byteContent);
            // 加密结果
            return result; 
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        }
        return null;
    }
  1. 解密
    /**
     * 
     * @description 解密
     *
     * @param content 待解密内容
     * @param password 解密密钥
     * @return
     */
    public static byte[] decryptFrom(byte[] content, String password) {
        try {
            //创建AES密钥生成器
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
            //使用用户提供的随机源初始化此密钥生成器,使其具有确定的密钥长度
            keyGenerator.init(128, new SecureRandom(password.getBytes()));
            //生成一个密钥
            SecretKey secretKey = keyGenerator.generateKey();
            //编码的密钥,如果此密钥不支持编码,则返回 null
            byte[] enCodeFormat = secretKey.getEncoded();
            //根据给定的字节数组构造一个密钥
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
            // 创建密码器
            Cipher cipher = Cipher.getInstance("AES");
            // 初始化
            cipher.init(Cipher.DECRYPT_MODE, key);
            byte[] result = cipher.doFinal(content);
            // 返回结果
            return result; 
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        }
        return null;
    }
  1. 测试
public static void main(String[] args) {
    String content = "7654321 ";
    String password = "a.7?6#5@4!3^1%2";
    byte[] encryptResult = encrypt(content,pa
    System.out.println(encryptResult);
    byte[] decryptResult = decryptFrom(ecryptResult, password);
    System.out.println("解密后:" + new String(decryptResult));
}
### Java AES 加密实现教程 #### 创建加密工具类 为了便于管理和重复利用,建议创建一个专门用于处理AES加解密操作的工具类 `AesUtil`。 ```java import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class AesUtil { private static final String ALGORITHM = "AES"; private static final String TRANSFORMATION = "AES/CBC/PKCS5Padding"; public static SecretKeySpec generateKey() throws Exception { KeyGenerator keyGen = KeyGenerator.getInstance(ALGORITHM); keyGen.init(256); // 使用256位长度秘钥 SecretKey secretKey = keyGen.generateKey(); return new SecretKeySpec(secretKey.getEncoded(), ALGORITHM); } public static byte[] encrypt(String plainText, SecretKeySpec key, IvParameterSpec iv) throws Exception { Cipher cipher = Cipher.getInstance(TRANSFORMATION); cipher.init(Cipher.ENCRYPT_MODE, key, iv); return cipher.doFinal(plainText.getBytes()); } public static String decrypt(byte[] cipherText, SecretKeySpec key, IvParameterSpec iv) throws Exception { Cipher cipher = Cipher.getInstance(TRANSFORMATION); cipher.init(Cipher.DECRYPT_MODE, key, iv); return new String(cipher.doFinal(cipherText)); } } ``` 此代码展示了如何生成AES秘钥以及执行基本的加密和解密过程[^1]。注意这里选择了更安全的CBC模式而非示例中的ECB模式,并加入了初始化向量IV来增强安全性。 对于实际应用而言,还需要考虑秘钥的安全存储方式、异常处理机制等问题,在生产环境中应遵循最佳实践指南以确保数据传输的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值