[英]How could i decrypt openssl in Java?
I need to decrypt openssl encrypted file in Java by passing key. 我需要通过传递密钥来解密Java中的openssl加密文件。
I have previously checked from the below link, but it does not include explicit key parameter passing and reads file line by line. 我之前已经从下面的链接中进行了检查,但是它不包括显式键参数传递,并且逐行读取文件。 How to decrypt file in Java encrypted with openssl command using AES?
如何使用AES解密用openssl命令加密的Java文件?
As differently, my files encrypted as a whole rather than line encryption and I have an explicit key to decrypt the file. 与之不同的是,我的文件是整体加密的,而不是行加密的,我有一个明确的密钥来解密文件。
The other issue is my file size is so big and I am not sure about the best method of saving the file in memory as a whole in the first step. 另一个问题是我的文件太大,我不确定第一步中将文件整体保存在内存中的最佳方法。
Thanks in advance. 提前致谢。
I need to decrypt openssl encrypted file in Java by passing key.
我需要通过传递密钥来解密Java中的openssl加密文件。
openssl enc -d -aes-256-cbc -in myfile.csv.enc -out myoutputfile.csv -pass key.bin
openssl enc -d -aes-256-cbc -in myfile.csv.enc -out myoutputfile.csv -pass key.bin
Here you provide a password file, not a key. 在这里,您提供密码文件,而不是密钥。 Key and IV are computed from the password and random salt.
根据密码和随机盐计算出密钥和IV。
As differently, my files encrypted as a whole rather than line encryption and I have an explicit key to decrypt the file.
与之不同的是,我的文件是整体加密的,而不是行加密的,我有一个明确的密钥来解密文件。
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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.