JAVA AES 256解密 [英] JAVA AES 256 Decrypt

查看:224
本文介绍了JAVA AES 256解密的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用AES解密一些数据。我得到了一个256位密钥和16个字节的IV,如下所示:

I'm trying to decrypt with AES some data. I've been given a 256 bit key and 16 byte IV like these:

  String key = "Hh1s1f4T2mpN3yCh4ngeL8t3r\\.Thxpp";

  int[] v = {11, 1, 555, 222, 241, 21, 11, 33, 35, 91, 45, 6, 14, 30, 22, 234};

  String IV = Arrays.toString( v );

有人告诉我填充应该是PKCS7,但是当我用<$ c $初始化密码时c> AES / CBC / PKCS7PADDING 它表示:找不到任何支持AES / CBC / PKCS7PADDING的提供商

I've been told the padding should be PKCS7 but when I init the cipher with AES/CBC/PKCS7PADDING it says: Cannot find any provider supporting AES/CBC/PKCS7PADDING

如果我使用 AES / CBC / PKCS5PADDING 我会得到密钥大小非法,但是我已经检查过了密钥大小为32。

If I use AES/CBC/PKCS5PADDING I get Illegal key size but I've checked that the key size is 32.

  public static String decrypt(String key, String initVector, String encrypted) {
    try {
        System.out.println( "Key size: " + key.getBytes("UTF-8").length ); 

        IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
        SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");

        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
        cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);

        byte[] original = cipher.doFinal(Base64.decodeBase64(encrypted));

        return new String(original);
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    return null;
 }


推荐答案

如果您得到了 IllegalKeySize 具有 AES-256 的异常,请检查以确保您具有 JCE无限加密强度策略文件。对于任何 128位的AES密钥长度,它们都是必需的。

If you are getting an IllegalKeySize exception with AES-256, check to ensure you have the JCE Unlimited Cryptographic Strength Policy files installed in your active JVM. They are required for any AES key length over 128 bits.

(PKCS#7填充方案有效地等同于PKCS#5在Java 中(块大小在规范定义中有所不同),但是Java从未在其列表中添加PKCS#7名称,因此使用 PKCS5Padding 是正确的。)

(PKCS #7 padding scheme is effectively equivalent to PKCS #5 in Java (the block size differs in the spec definitions), but Java never added the PKCS #7 name to its list, so using PKCS5Padding is correct.)

这篇关于JAVA AES 256解密的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆