【发布时间】:2016-02-22 22:18:06
【问题描述】:
起初,Coldfusion Encrypt:
<cfset message = '1447841550'>
<cfset key = 'Mk9m98IfEblmPfrpsawt7BmxObt98Jev'>
<cfset ciphertext = Encrypt(#message#, #key#, "desede", "base64")>
<cfoutput>#ciphertext#</cfoutput>
那么,PHP mcrypt:
$message = "1447841550";
$key = 'Mk9m98IfEblmPfrpsawt7BmxObt98Jev';
$key = base64_decode($key);
$bytes = array(0,0,0,0,0,0,0,0); //byte [] IV = {0, 0, 0, 0, 0, 0, 0, 0}
$iv = implode(array_map("chr", $bytes));
$ciphertext = mcrypt_encrypt(MCRYPT_3DES, $key, $message, MCRYPT_MODE_CBC, $iv);
echo base64_encode($ciphertext);
问题。
同一个字符串,同一个算法,同一个编码。
仍然有一小部分输出不匹配。
下面是真实的示例输出。
// Coldfusion output.
n6lp0I1w5FwrP3yPw3s8bw==
^^^^^^^^^^
Same part
// PHP output.
n6lp0I1w5FxLQHskKMn4sw==
^^^^^^^^^^
Same part
为什么 Coldfusion 会产生不同的结果?
如何在不修改 PHP 代码的情况下在 Coldfusion 中获得相同的结果。 PHP 输出对我来说是正确的输出。
是否有可能使用 javascript 获得正确的结果 (PHP)?这个方案也不错。
我很沮丧。
【问题讨论】:
-
在这里解决了吗? stackoverflow.com/a/2819186/577052
-
嗨 Bardware,我试过了,但结果不一样。我知道我需要像 PHP "MCRYPT_MODE_CBC" 一样应用算法 "DESede / ECB / NoPadding" 它不适用于我 "DESede / ECB / NoPadding" 或 "DESede / ECB / PKCS5Padding" 有什么想法吗?
-
对不起,我的意思是 DESede/CBC/NoPadding
标签: php encryption coldfusion mcrypt