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

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

SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");

cipher = Cipher.getInstance("AES");

cipher.init(Cipher.ENCRYPT_MODE, skeySpec );

我是C / C

++开发人员,而不是Java,但是从我可以看出来的传统Java代码中,既没有指定模式,也没有指定初始化向量。有人偶然知道默认情况下将使用什么Java,因为未指定它?

我们需要新的C / C ++应用程序来解密Java加密的数据。但是我不知道该如何使用OpenSSL的初始化向量和链接模式,因为我不知道Java会做什么。

回答:

找到可能的答案:

“默认情况下,Java密码(至少在Sun的实现中)以所谓的电子密码本(ECB)模式构造。”

(来源:http

:

//www.javamex.com/tutorials/cryptography/block_modes.shtml)

因此,如果默认情况下使用ECB,我想这意味着没有初始化向量,并且我可以使用OpenSSL中的以下方法:

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


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


一切正常。感谢您的无数提示。我可以ECB默认确认使用Java 。所有填充字节均设置为添加的字节数(称为PKCS5-padding)。"Hello

World"->通过Java加密->使用OpenSSL解密将类似于"Hello World\5\5\5\5\5"

以上是 如何使用OpenSSL解密Java AES加密的数据? 的全部内容, 来源链接: utcz.com/qa/415036.html

回到顶部