java aes加密

本文详细介绍了一种在Java中使用AES加密算法与JavaScript进行密钥交互的方法,特别强调了密钥长度需为16位才能确保匹配。通过具体代码示例,展示了如何在Java中实现AES/CBC/PKCS5Padding模式的加密与解密过程。

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

特别注意 java使用aes 加密语js交互 key是16为才可以匹配

package com.dl.utils;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class AESCoder{

    public static String encrypt(String strKey, String strIn) throws Exception {
        SecretKeySpec skeySpec = getKey(strKey);
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        IvParameterSpec iv = new IvParameterSpec("01Gx03Yx05WW0607".getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        byte[] encrypted = cipher.doFinal(strIn.getBytes());

        return new BASE64Encoder().encode(encrypted);
    }

    public static String decrypt(String strKey, String strIn) throws Exception {
        SecretKeySpec skeySpec = getKey(strKey);
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        IvParameterSpec iv = new IvParameterSpec("01Gx03Yx05WW0607".getBytes());
        cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
        byte[] encrypted1 = new BASE64Decoder().decodeBuffer(strIn);

        byte[] original = cipher.doFinal(encrypted1);
        String originalString = new String(original);
        return originalString;
    }

    private static SecretKeySpec getKey(String strKey) throws Exception {
        byte[] arrBTmp = strKey.getBytes();
        byte[] arrB = new byte[16]; // 创建一个空的16位字节数组(默认值为0)
        for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {
            arrB[i] = arrBTmp[i];
        }
        SecretKeySpec skeySpec = new SecretKeySpec(arrB, "AES");

        return skeySpec;
    }

    //key 为16位  截取 key的前后 8位 为16位   code为原文
//    public static void main(String[] args) throws Exception {
//        String Code = "123abc";
//        String key = "12345678@#pqweg&11";
//        String codE;
//        codE = AESCoder.encrypt(key, Code);
//        System.out.println("原文:" + Code);
//        System.out.println("密钥:" + key);
//        System.out.println("密文:" + codE);
//        System.out.println("解密:" + AESCoder.decrypt(key, codE));
//    }
}

### 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、付费专栏及课程。

余额充值