【发布时间】:2013-12-14 05:43:55
【问题描述】:
我正在尝试制作解密逻辑并知道已使用以下方式制作了加密字符串: 密钥:8d6ea4d3e6f8c4f8641516baa5e42b85 转换:AES/CBC/ISO10126PADDING 盐:1c4dd21d7ba43bdd 迭代次数:0 加密字符串:JO0blEp+nEl5nNhgUqoZRJNecogM1XHIXUCatPOJycs=
这里给出了 Key 和 salt 的示例。重点是显示我拥有这些数据的格式。加密方法基于 JDK (SunJCE) 的默认 JCE 提供程序。
现在基于我上面的这些信息,我正在尝试构建解密逻辑。几个疑问: 1. 使用AES-265,可以有128位的Key和64位的salt值吗?或者我错误地解释了信息。 2.看到加密后的字符串,看起来是Base64编码的值,需要边解密边解码。我的理解正确吗? 3. 下面是我正在编写的解密逻辑,它在调用 doFinal() 函数时给出错误:“javax.crypto.BadPaddingException: Given final block not proper padded”。 从过去的三天开始我就被打动了:(。你能指出或给我这里用于解密的确切代码吗?有信息:
public static void main(String[] args) throws Exception
{
String encstring = "JO0blEp+nEl5nNhgUqoZRJNecogM1XHIXUCatPOJycs=";
String salt1 = "1c4dd21d7ba43bdd";
String keyStr = "8d6ea4d3e6f8c4f8641516baa5e42b85";
byte[] keyBytes = Hex.decodeHex(keyStr.toCharArray());
SecretKey secret2 = new SecretKeySpec(keyBytes, "AES");
byte[] iv = new byte[]{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
AlgorithmParameterSpec params = new IvParameterSpec(iv);
Cipher cipher2 = Cipher.getInstance("AES/CBC/ISO10126PADDING", "SunJCE");
cipher2.init(Cipher.DECRYPT_MODE, secret2, params);
byte[] encryptedString = Base64.decodeBase64(encstring.getBytes());
byte[] plaintext1 = cipher2.doFinal(encryptedString);
System.out.println(new String(plaintext));
}
}
【问题讨论】:
标签: encryption cbc-mode aescryptoserviceprovider