java aes解密算法_使用java实现AES算法的加解密(亲测可用)

话不多说,直接上代码

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;

import sun.misc.BASE64Encoder;

public class AESUtil {

private static String key="111";

/**

* 加密

* @param content

* @param strKey

* @return

* @throws Exception

*/

public static byte[] encrypt(String content,String strKey ) throws Exception {

SecretKeySpec skeySpec = getKey(strKey);

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());

cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);

byte[] encrypted = cipher.doFinal(content.getBytes());

return  encrypted;

}

/**

* 解密

* @param strKey

* @param content

* @return

* @throws Exception

*/

public static String decrypt(byte[] content,String strKey ) throws Exception {

SecretKeySpec skeySpec = getKey(strKey);

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());

cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);

byte[] original = cipher.doFinal(content);

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;

}

/**

* base 64 encode

* @param bytes 待编码的byte[]

* @return 编码后的base 64 code

*/

public static String base64Encode(byte[] bytes){

return new BASE64Encoder().encode(bytes);

}

/**

* base 64 decode

* @param base64Code 待解码的base 64 code

* @return 解码后的byte[]

* @throws Exception

*/

public static byte[] base64Decode(String base64Code) throws Exception{

return base64Code.isEmpty() ? null : new BASE64Decoder().decodeBuffer(base64Code);

}

/**

* AES加密为base 64 code

* @param content 待加密的内容

* @param encryptKey 加密密钥

* @return 加密后的base 64 code

* @throws Exception  //加密传String类型,返回String类型

*/

public static String aesEncrypt(String content, String encryptKey) throws Exception {

return base64Encode(encrypt(content, encryptKey));

}

/**

* 将base 64 code AES解密

* @param encryptStr 待解密的base 64 code

* @param decryptKey 解密密钥

* @return 解密后的string   //解密传String类型,返回String类型

* @throws Exception

*/

public static String aesDecrypt(String encryptStr, String decryptKey) throws Exception {

return encryptStr.isEmpty() ? null : decrypt(base64Decode(encryptStr), decryptKey);

}

public static void main(String[] args) throws Exception {

//        String encrypt = aesEncrypt("root", key);

//        System.out.println(encrypt);

String decrypt = aesDecrypt("+hf8qB4LhS7L7BzBy83bLg==", key);

System.out.println(decrypt);

}

}

如果遇到了BASE64Encoder和BASE64Decoder报错的话,请参考 https://www.cnblogs.com/liuyangfirst/p/6429913.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,针对您的问题,我可以简单地给出以下代码示例,展示如何使用 JavaAES 加解密算法。 首先,我们需要引入以下包: ```java import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; ``` 然后,我们需要定义一个加解密的通用函数: ```java public static String encrypt(String data, String key, String iv) throws Exception { Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); int blockSize = cipher.getBlockSize(); byte[] dataBytes = data.getBytes(); int plaintextLength = dataBytes.length; if (plaintextLength % blockSize != 0) { plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize)); } byte[] plaintext = new byte[plaintextLength]; System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length); SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES"); IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); byte[] encrypted = cipher.doFinal(plaintext); return new String(Base64.getEncoder().encode(encrypted)); } public static String decrypt(String data, String key, String iv) throws Exception { byte[] encrypted = Base64.getDecoder().decode(data.getBytes()); Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES"); IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); byte[] decrypted = cipher.doFinal(encrypted); return new String(decrypted).trim(); } ``` 在上述函数中,我们使用AES 加解密算法,采用了 CBC 模式和 NoPadding 填充方式。同时,我们需要传入三个参数: - data:待加解密的数据 - key:AES 密钥 - ivAES 偏移量 最后,我们可以调用上述函数进行加解密操作: ```java String key = "0123456789abcdef"; String iv = "fedcba9876543210"; String data = "Hello, world!"; String encrypted = encrypt(data, key, iv); String decrypted = decrypt(encrypted, key, iv); System.out.println("Encrypted: " + encrypted); System.out.println("Decrypted: " + decrypted); ``` 以上代码展示了如何使用 JavaAES 加解密算法进行加解密操作。需要注意的是,为了确保加解密的正确性,我们需要在加密和解密使用相同的密钥和偏移量。同时,由于使用了 NoPadding 填充方式,因此我们需要手动对待加密的数据进行填充。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值