首页 >Java >java教程 >如何在Java中解密OpenSSL AES-256-CBC加密文件?

如何在Java中解密OpenSSL AES-256-CBC加密文件?

Susan Sarandon
Susan Sarandon原创
2024-12-19 16:30:10200浏览

How to Decrypt OpenSSL AES-256-CBC Encrypted Files in Java?

使用 AES 在 Java 中解密 OpenSSL 加密的文件

挑战:

用户需要使用 openssl 命令解密在 UNIX 中加密的文件Java 中的 AES-256-CBC 加密。密码也是必需的。

使用 Java 进行 OpenSSL 解密:

OpenSSL 采用自己的基于密码的密钥派生方法。密文也隐式编码为 Base64。

加密算法定义:

salt = random(8)
keyAndIV = BytesToKey(password, salt, 48)
键= keyAndIV[0..31]
iv = keyAndIV[32..47]
ct = AES-256-CBC-encrypt(key, iv, plaintext)

Java实现:

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.security.GeneralSecurityException;
import java.security.MessageDigest;
import java.util.Arrays;
import java.util.List;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

import org.bouncycastle.util.encoders.Base64;

public class OpenSSLDecryptor {
    // ... Code as in the given answer ...
}

注释:

  • 指定了 ASCII 字符集,但实际字符集可能会有所不同。
  • 应使用 NIST 批准的 PBKDF2 算法来改进安全性。
  • OpenSSL 1.1.0c 更改了其摘要算法。在命令和 Java 代码中显式指定它。

以上是如何在Java中解密OpenSSL AES-256-CBC加密文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn