当前位置: 首页 > 面试题库 >

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

拓拔耀
2023-03-14
问题内容

我正在连接一个旧的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"



 类似资料:
  • 我有一个应用程序,需要在配置文件中存储一些秘密密码,如数据库和ftp密码/详细信息。我环顾四周,发现了许多使用AES的加密/解密解决方案,但我似乎不知道如何在不改变密钥的情况下使其工作。这意味着我可以加密和解密(使用相同的秘密密钥),但在重启等过程中保持持久性。我似乎无法让秘密钥匙保持不变。下面的示例显示了我的工作方法: 到目前为止还不错。然而,如果我运行它一次,我可能会得到'2Vhht/L80U

  • 我正在使用以下函数通过Qt中的OpenSSL库加密我的数据: “源”在“123456789012345678901234567890123456789012ABC”中。 “密码”为“1HA!DH==SJAH48S8AK!?SKIITFI120XX”。 所以...如果我正确的话,那么EVP_BytesToKey()应该从密码中生成一个密钥,并提供数据以在后面解密字符串。 对base64编码的密钥是:

  • 我使用下面的命令使用加密了一个文件 我怎么能解密文件使用python加密包。我尝试了下面,它不工作。 我需要一种使用openssl aes-256-cbc密码加密文件并在python中解密的方法

  • 我有这样的情况,我使用OpenSSL生成了一个公钥/私钥对,供gdcmanon使用,遵循他们网站上列出的说明。具体地说,我使用以下命令为gdcmanon生成密钥 然后,我就能够按照他们的指示,加密一个文件,使用 这在c.init(cipher.decrypt_mode,key)行失败; 我已经为Java6安装了JCE(我正在使用)。我不知道我做错了什么。谁能给我指出正确的方向吗。 谢谢

  • 问题内容: 我需要使用以下命令在JAVA中解密在UNIX中加密的文件: 我必须像在UNIX中一样在Java中解密 有人可以给我一个Java代码来执行此操作吗? 问题答案: OpenSSL通常使用自己的基于密码的密钥派生方法,该方法在中指定EVP_BytesToKey,请参见下面的代码。此外,它会在多行中隐式地将密文编码为base 64,以便在邮件正文中发送密文。 因此,结果是伪代码: 因此解密为:

  • 问题内容: 我必须使用openssl命令行或C api加密xml文件。输出应为Base64。 一个Java程序将用于解密。该程序由客户提供,不能更改(他们正在将这些代码用于旧版应用程序)。正如您在下面的代码中看到的那样,客户提供了一个密码短语,因此将使用SecretKeySpec方法生成密钥。 Java代码: 我已经测试了几个命令,例如: 但是,使用Java无法成功解密给定的输出。为了进行测试,我