我需要通过传递密钥来解密Java中的openssl加密文件。
我之前已经从下面的链接检查过,但它不包括显式的关键参数传递和逐行读取文件。如何使用AES解密使用openssl命令加密的Java文件? https://stackoverflow.com/questions/11783062/how-to-decrypt-file-in-java-encrypted-with-openssl-command-using-aes
不同的是,我的文件作为一个整体进行加密,而不是行加密,并且我有一个明确的密钥来解密该文件。
另一个问题是我的文件太大,我不确定第一步中将文件作为一个整体保存在内存中的最佳方法。
提前致谢。
我需要通过传递密钥来解密Java中的openssl加密文件。
openssl enc -d -aes-256-cbc -in myfile.csv.enc -out myoutputfile.csv -pass key.bin
您在这里提供密码文件,而不是密钥。密钥和 IV 是根据密码和随机盐计算的。
`openssl enc -K e849fb4e3779791a3ffe9f576b086bdf -iv 23acf784ff126ab52c90d15fd7ecb921 -e -aes-128-cbc -in notes.txt -out notes.enc`
Unlike the example, where the encryption key and IV are computed from the password (and random salt), providing explicitly key and IV the data stored are raw encrypted data (with nothing) prepended.
不同的是,我的文件作为一个整体进行加密,而不是行加密,并且我有一个明确的密钥来解密该文件。
Cipher cipher = Cipher.getInstance("AES/CBC/Pkcs5Padding");
byte[] passwordBytes = readPasswordBytes();
InputStream in = new BufferedInputStream(new FileInputStream("notes.enc"));
byte[] saltedString = new byte[8];
in.read(saltedString); // read the "Salted__" prefix
byte[] salt = new byte[8];
in.read(salt);
// see the EVP_BytesToKey and parameters from the linked question
byte[][] keyAndIv = EVP_BytesToKey(
KEY_SIZE_BITS / Byte.SIZE,
cipher.getBlockSize(),
md5,
salt,
passwordBytes,
ITERATIONS);
byte[] key = keyAndIv[0];
byte[] iv = keyAndIv[1];
SecretKeySpec secKeySpec = new SecretKeySpec(key, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(Cipher.DECRYPT_MODE, secKeySpec, ivSpec);
// here we will use 4kB buffer to read and decrypt data
byte[] buffer = new byte[4096];
OutputStream out = new BufferedOutputStream(new FileOutputStream("notes2.txt"));
for(int readBytes = in.read(buffer); readBytes>-1; readBytes = in.read(buffer)) {
byte[] decrypted = cipher.update(buffer, 0, readBytes);
out.write(decrypted);
}
byte[] decrypted = cipher.doFinal();
out.write(decrypted);
out.flush();
out.close();
in.close();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)