使用Java解密openssl aes-256-cbc使用提供的密钥和iv
我一直在寻找一个Java代码示例来执行以下操作,但不成功。 我正在为我的特定情况寻找解决scheme。
一个密钥和IV已经使用“testtest”生成密码:
openssl enc -aes-256-cbc -P salt=2855243412E30BD7 key=E4A38479A2349177EAE6038A018483318350E7F5430BDC8F82F1974715CB54E5 iv=629E2E1500B6BA687A385D410D5B08E3
使用openssl命令在Linux上encryption了一个文件(名为text):
openssl enc -aes-256-cbc -K E4A38479A2349177EAE6038A018483318350E7F5430BDC8F82F1974715CB54E5 -iv 629E2E1500B6BA687A385D410D5B08E3 -e -in text -out text_ENCRYPTED
它可以使用以下方式成功解密:
openssl enc -aes-256-cbc -K E4A38479A2349177EAE6038A018483318350E7F5430BDC8F82F1974715CB54E5 -iv 629E2E1500B6BA687A385D410D5B08E3 -d -in text_ENCRYPTED -out text_DECRYPTED
我可以访问encryption文件,盐,密钥和iv。 我不相信我会收到密码。 此外,我已经安装了无限强度JCE政策。 到目前为止,我只find另一个Java程序执行encryption并生成这些参数的示例。 对于我的情况,我必须使用给予我的salt,key和iv值来解密一个文件。 这可能与Java? 请记住我受此configuration的约束,非常感谢您的时间和帮助。
你应该使用这样的东西:
InputStream cipherInputStream = null; try { final StringBuilder output = new StringBuilder(); final byte[] secretKey = javax.xml.bind.DatatypeConverter.parseHexBinary("E4A38479A2349177EAE6038A018483318350E7F5430BDC8F82F1974715CB54E5"); final byte[] initVector = javax.xml.bind.DatatypeConverter.parseHexBinary("629E2E1500B6BA687A385D410D5B08E3"); final Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(secretKey, "AES"), new IvParameterSpec(initVector, 0, cipher.getBlockSize())); cipherInputStream = new CipherInputStream(new FileInputStream("text_ENCRYPTED"), cipher); final String charsetName = "UTF-8"; final byte[] buffer = new byte[8192]; int read = cipherInputStream.read(buffer); while (read > -1) { output.append(new String(buffer, 0, read, charsetName)); read = cipherInputStream.read(buffer); } System.out.println(output); } finally { if (cipherInputStream != null) { cipherInputStream.close(); } }