我有这个mcrypt_encrypt呼吁,对于给定的$键,$消息,$ IV:PHP:mcrypt_encrypt到openssl_encrypt,并OPENSSL_ZERO_PADDING问题
$string = mcrypt_encrypt(MCRYPT_3DES, $key, $message, MCRYPT_MODE_CBC, $iv);
我想给mcrypt_encrypt
呼叫更改为openssl_encrypt
一个,以防万一。
通过有$mode = 'des-ede3-cbc'
或$mode = '3DES';
和$options = true
我得到更相似的响应,但不完全相同。有没有其他的方式叫它获得完美的比赛?
我得到这个(Base64编码)的LOREM-存有$message
+ $key
组合,所以我开始相信一个函数或其它被加密之前有所填充的消息...
为mcrypt的
“Y + JgMBdfI7ZYY3M9lJXCtb5Vgu + rWvLBfjug2GLX7uo =”
用于OpenSSL的
“Y + JgMBdfI7ZYY3M9lJXCtb5Vgu + rWvLBvte4swdttHY =”
在一个空字符串使用$选项传递OPENSSL_ZERO_PADDING,但传送什么,但(OPENSSL_RAW_DATA,或真)结果试过...
既不使用也不OPENSSL_ZERO_PADDING
工作OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
... :(
还有其他线索吗?我正在使用“OpenSSL 1.0.2g 2016年3月1日”。
已读取this q & a,但它不帮助我。不是onlyone与填充麻烦,但迄今没有解决方案。 (二答案谈论添加填充到mcrypt的电话,我真的想移除的OpenSSL加密通话填充...
你永远不应该得到一个完美的匹配,永远。这就是初始化矢量的用途。每次您使用** same **算法和** same **键加密** same **有效内容时,如果您想要安全,应该得到完全不同的输出。如果对于相同的输入获得相同的输出,则加密功能很弱。这就是加密的第四点。一旦加密,您就可以将IV加密的有效载荷传送到另一端。 – Mjh
如果我使用相同的有效载荷,相同的算法,相同的IV;我想我应该得到相同的输出。不要紧,我应该为每个调用使用不同的IV:对于两个调用(mcrypt和openssl)使用相同的IV,我想我应该得到相同的输出,对吧? 我开始相信与消息填充有关,因为输出的乞求是相同的。 – yivi
如果一切都一样,那么你应该得到相同的输出,是正确的。 'openssl_encrypt'的第四个参数控制着填充。你可以用'$ encrypted = openssl_encrypt($ data,$ alg,$ key,OPENSSL_ZERO_PADDING,$ iv)加密;'并检查你是否得到相同的输出。在[www.php.net/openssl_encrypt](http://www.php.net/openssl_encrypt)中,您可以阅读注释以了解如何使用第4个参数。 – Mjh