使用AES加密SOAP信封
我正在使用以下要求处理需要使用SOAP信封进行AES加密的项目。使用AES加密SOAP信封
- 加密密钥:
myKey-1234567abcdef
- AES-256加密
- 128块大小
- PKCS7填充
- 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
,想知道如果我的实现满足填充,块大小和矢量需求?
我很欣赏任何建议,提前致谢!
第一:您的密钥不适合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
)的第四个参数以获得未编码的输出。
感谢您的回复。而且,对不起,是的,他们确实要求AES-256加密(请参阅编辑)。 – AnchovyLegend
值得明确指出的是,你不应该使用mcrypt,因为它已被弃用,并且还没有被多年积极维护。 – Sammitch
解密怎么样?我需要为此提供相同的矢量吗? – AnchovyLegend
AES是MCRYPT_RIJNDAEL_128,不是256混淆......这可能有助于https://gist.github.com/lkorth/4061732这是一种混乱的事情,这就是为什么我删除了我的答案。 – ArtisticPhoenix