我正面临着一个关于Java解密的奇怪行为。使用下面的代码
public void decrypt(File file, String output_file_path) throws FileNotFoundException, IOException, GeneralSecurityException {
String hex_enc_key = "346a23652a46392b4d73257c67317e352e3372482177652c";
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(HexParser.fromHexString(hex_enc_key), "AES");
cipher.init(Cipher.DECRYPT_MODE, keySpec);
CipherOutputStream cos = new CipherOutputStream(new FileOutputStream(new File(output_file_path)), cipher);
FileInputStream fis = new FileInputStream(file);
doCopy(fis, cos);
}
我得到随机例外
java.security.InvalidKeyException:非法密钥大小或默认参数
我用Google搜索了问题并发现了JCE unlimited strength,但我无法理解为什么即使我总是使用相同的键也会得到这些随机异常(有时候它会起作用)有时不是,基于我需要解密的输入文件)。
为了清楚起见,我正在使用
Cipher.getMaxAllowedKeyLength("AES")
检查JCE限制,并且没有任何问题使用相同的设置加密:
public void encrypt(File file, String output_file_path) throws FileNotFoundException, IOException, GeneralSecurityException {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(HexParser.fromHexString(db_enc_key), "AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
CipherInputStream cis = new CipherInputStream(new FileInputStream(file), cipher);
FileOutputStream os = new FileOutputStream(new File(output_file_path));
doCopy(cis, os);
cis.close();
os.close();
}
有人能指出我正确的方向吗?
非常感谢,尼古拉