【发布时间】:2018-06-15 12:31:22
【问题描述】:
为我提供了两个文件 encrypted_key.enc 和 encrypted_data.csv.enc。我需要使用我的私钥解密 encrypted_key.enc 以获得对称密钥,然后使用该对称密钥解密 encrypted_data.csv.enc 文件。 p>
在终端上,以下命令完成工作:
openssl rsautl -decrypt -ssl -inkey my_private_key -in encrypted_key.enc -out key
openssl aes-256-cbc -d -in encrypted_data.csv.enc -out secret.txt -pass file:key
我的目标是执行这两个命令的 java 等效项。我能够成功解密第一个文件并检索对称密钥。
现在我无法使用该对称密钥来解密 csv 文件。我的问题出现在decipher.init(Cipher.DECRYPT_MODE, keySpec); 我收到以下堆栈跟踪
线程“main”java.security.InvalidKeyException 中的异常:非法密钥大小或默认参数
我不清楚我在解密过程中究竟遗漏了什么。我试过更改密码提供程序,但这没有帮助。其他帖子使用IVParameterSpec 发布了解决方案,但我的解密案例似乎不需要它,或者我不知道该放在哪里。
File file = new File("my_private_key");
PrivateKey pk = getPrivateKey(file);
// Decrypt secret key
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, pk);
File skFile = new File("encrypted_key.enc");
FileInputStream fileInputStream = new FileInputStream(skFile);
byte[] decodedBytes = IOUtils.toByteArray(fileInputStream);
byte[] original = cipher.doFinal(decodedBytes);
String decodedOriginal = new String(Base64.encodeBase64(original));
System.out.println(decodedOriginal);
// Use the secret key for decrypting file
File csvFile =
new File(
"encrypted_data.csv.enc");
FileInputStream csvIS = new FileInputStream(csvFile);
Cipher decipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(original, "AES");
decipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] csvOriginal = decipher.doFinal(IOUtils.toByteArray(csvIS));
String csvContents = new String(csvOriginal);
System.out.println(csvContents);
【问题讨论】:
标签: java encryption