我正在开发一个项目,需要使用以下要求对soap信封进行AES加密。
myKey-1234567abcdef
这就是我的尝试:
$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
函数的选项,想知道我的实现是否满足填充,块大小和向量的需求?
我感谢任何建议,提前谢谢!
答案 0 :(得分:1)
首先:您的密钥不适合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
)以获得未编码的输出。