gpt4 book ai didi

java - 如何使用 OpenSSL 解密 Java AES 加密数据?

转载 作者:太空宇宙 更新时间:2023-11-04 01:41:22 34 4
gpt4 key购买 nike

我正在连接到使用 AES 加密数据的旧版 Java 应用程序(无法更改该应用程序)。以下是原始 Java 代码如何实例化 AES 密码:

SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec );

我是一名 C/C++ 开发人员,不是 Java,但据我所知,这段遗留 Java 代码没有指定模式,也没有指定初始化 vector 。由于未指定,任何人都碰巧知道默认情况下 Java 将使用什么?

我们需要新的 C/C++ 应用程序来解密 Java 加密的数据。但是我对 OpenSSL 的初始化 vector 和链接模式使用什么感到茫然,因为我不知道 java 是做什么的。

最佳答案

找到可能的答案:

"By default, Java Ciphers (at least in Sun's implementations) are constructed in what is called Electronic Codebook (ECB) mode." (Source: http://www.javamex.com/tutorials/cryptography/block_modes.shtml)

所以如果默认使用 ECB,我想这意味着没有初始化 vector ,我可以使用 OpenSSL 中的以下方法:

void AES_ecb_encrypt(*in, *out, *key, enc);

使用 AES_decrypt() 我可以解密来自 Java 端的 1000 多字节消息。所以看起来 Java 确实默认为没有初始化 vector 的 ECB 模式。但是,我仍然无法加密并向 Java 应用程序发送新消息。调查仍在继续。


一切正常。感谢您的无数提示。我可以确认 Java 默认使用 ECB。所有填充字节都设置为添加的字节数(称为 PKCS5 填充)。 "Hello World" -> 用 Ja​​va 加密 -> 使用 OpenSSL 解密看起来像 "Hello World\5\5\5\5\5"

关于java - 如何使用 OpenSSL 解密 Java AES 加密数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5136279/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com