当前位置: 首页 > 知识库问答 >
问题:

使用AES加密SOAP信封

公冶智刚
2023-03-14

我正在从事一个项目,该项目需要使用以下要求对肥皂信封进行AES加密。

  • 加密密钥: 我的密钥-1234567
  • AES-256 加密
  • 128 块大小
  • 填充
  • 16 位向量(向量在加密消息之前附加)
  • 密码块链接 (CBC)

这就是我所尝试的:

$key = 'myKey-1234567abcdef';
$encryptionMethod = "AES-256-CBC";
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$iv = substr(mcrypt_create_iv($iv_size, MCRYPT_RAND), 0, 16);
$xml = openssl_encrypt($xml,$encryptionMethod, $key, 0, $iv);

我目前收到一个400错误的请求错误,似乎有很多参数常量mcrypt函数的选项,想知道我的实现是否满足填充、块大小和向量的需求?

我感谢任何建议,提前感谢!

共有1个答案

葛安和
2023-03-14

首先:您的密钥长度不适合 AES-256。我意识到您在此处使用的密钥是一个示例,但请确保您获得的密钥长度为32个字符(256位)。如果不是,请要求收件人进行澄清。

第二:您在这里不恰当地混合了mcrypt和openssl扩展。无论如何,您都不应该使用mcrypt,因为它没有维护,有时会损坏,并且会在PHP 7.2中完全删除。相反,将IV大小硬编码为16并使用openssl_random_pseudo_bytes生成它:

$iv = openssl_random_pseudo_bytes(16);
$xml = openssl_encrypt($xml, $encryptionMethod, $key, 0, $iv);

第三:默认情况下,openssl_encrypt()将其输出编码为Base64。收件人可能没有预料到这一点。将OPENSSL_RAW_DATA作为第四个参数传递给openssl_encrypt()(替换0)以获得未编码的输出。

 类似资料:
  • 我正在尝试构建一个程序,该程序接收一个文件(任意大小的EXE),对其进行加密并将其复制到一个结构中。然后稍后对其进行解密,并确保其与使用时相同。 我有一个艰难的时间加密,然后解密文件。它似乎没有正确加密,我不知道如何测试它。 以下是我的问题: 我在这里做错了什么? 是否有更好的库使用AES加密?或者我应该坚持openSSL 让我们说我想用另一个键说“你好世界”。我能不能用这个字符串作为加密算法的参

  • null 我很困惑,我应该选择哪种方法?我不知道这两种方法的利弊。

  • 问题内容: 我正在尝试使用PyCrypto构建两个接受两个参数的函数:消息和密钥,然后对消息进行加密/解密。 我在网络上找到了几个链接可以帮助我,但是每个链接都有缺陷: 在codekoala上的此代码使用了os.urandom,PyCrypto不建议这样做。 此外,我不能保证给函数的键具有预期的确切长度。我该怎么做才能做到这一点? 另外,有几种模式,推荐哪种?我不知道该怎么用:/ 最后,IV到底是

  • 问题内容: 我正在编写一个用于传输文件的小型应用程序,或多或少地将其作为一种学习更多编程加密基础的方法。这个想法是生成一个RSA密钥对,交换公共密钥,并发送AES iv和密钥以进一步解密。我想用接收者的RSA公钥加密AES密钥,如下所示: 然后,我将密钥值写给接收器,并按如下方式解密: 在控制台的另一端,我将其作为输出: 此外,如果我创建一个大小为16的字节数组,并将cipher.doFinal(

  • 问题内容: 有没有一个很好的示例,说明如何在Android上使用AES 加密和解密图像及其他文件? 问题答案: 并像这样调用它们: 这应该可行,我现在在项目中使用类似的代码。

  • 我试图使用PyCrypto构建两个函数,它们接受两个参数:消息和密钥,然后加密/解密消息。 我在网上找到了几个帮助我的链接,但每一个都有缺陷: 编辑:删除了代码部分,因为它不安全。