如何使用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