java - 使用 Java 使用提供的 key 和 iv 解密 openssl aes-256-cbc

标签 java openssl

我一直在寻找 Java 代码示例来执行以下操作,但没有成功。我正在为我的特殊情况寻找解决方案。

已使用“testtest”生成 key 和 IV 作为密码:

openssl enc -aes-256-cbc -P 
salt=2855243412E30BD7
key=E4A38479A2349177EAE6038A018483318350E7F5430BDC8F82F1974715CB54E5
iv=629E2E1500B6BA687A385D410D5B08E3

在 Linux 上使用 openssl 命令加密了一个文件(命名文本):

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

我可以访问加密文件、salt、 key 和 iv。我不相信我会收到密码。此外,我还安装了无限强度的 JCE 策略。到目前为止,我只找到了另一个 java 程序进行加密并生成这些参数的例子。对于我的情况,我必须使用给我的盐、 key 和 iv 值来解密文件。这可能用 Java 实现吗?请记住我受此配置的约束,非常感谢您的时间和帮助。

最佳答案

你应该使用这样的东西:

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();
    }
}

关于java - 使用 Java 使用提供的 key 和 iv 解密 openssl aes-256-cbc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15594518/

相关文章:

java - 转换在 Java 中需要多少处理和内存使用?

java - NoClassDefFoundError 即使包含 .jar 文件

java - twitter4j 3.0.3 - 更新状态错误 404 - 仅发生在生产中

https - 您如何使用阻塞套接字进行超时持久/保持事件 SSL 连接?

ios - ios项目的sqlcipher版本迁移

java - JDBC 连接句柄应该是每个应用程序、每个线程还是每个查询?

java - 异步任务中的对话框错误

ssl - 创建 EC CSR 时命名曲线或域参数

c - 如何在网络内核扩展中使用OpenSSL?

php - openssl_random_pseudo_bytes() 应该使用什么长度?