JAVA AES 256解密 [英] JAVA AES 256 Decrypt
问题描述
我正在尝试使用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屋!