首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Coldfusion 3DES加密使加密结果不同于PHP `mcrypt_encrypt`

Coldfusion 3DES加密使加密结果不同于PHP `mcrypt_encrypt`
EN

Stack Overflow用户
提问于 2015-11-20 20:14:58
回答 1查看 340关注 0票数 5

首先,Coldfusion加密:

代码语言:javascript
复制
<cfset message = '1447841550'>
<cfset key = 'Mk9m98IfEblmPfrpsawt7BmxObt98Jev'>

<cfset ciphertext = Encrypt(#message#, #key#, "desede", "base64")>
<cfoutput>#ciphertext#</cfoutput>

然后,PHP mcrypt:

代码语言:javascript
复制
$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);

问题。

在相同的字符串,相同的算法和相同的编码中。

仍然有一小部分输出是不匹配的。

下面是真实的样例输出。

代码语言:javascript
复制
// Coldfusion output.

n6lp0I1w5FwrP3yPw3s8bw== 

^^^^^^^^^^

Same part


// PHP output.

n6lp0I1w5FxLQHskKMn4sw==

^^^^^^^^^^

Same part

为什么Coldfusion会让结果不同?

在不修改PHP代码的情况下,我如何在Coldfusion中得到同样的结果。PHP输出对我来说是正确的输出。

用javascript能得到正确的结果(PHP)吗?这个解决方案也很好。

我很沮丧。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-20 23:50:56

这些设置很接近,但并不完全相同。结果不同的原因是:

  1. "CBC“模式需要一个IV (初始化向量)。PHP代码显式地提供了IV,但是CF代码没有。因此,encrypt()函数随机生成一个IV。因此为什么结果不匹配:不同的IV,不同的结果。
  2. 当你使用"NoPadding“模式时,输入的字符串必须填充,以便它的长度是块大小的偶数倍(即DESEDE => 8)。据我所知CF encrypt()函数不支持零填充。但是,您可以使用下面这样的udf nullPad()

来模拟它

一旦您合并了这两(2)个更改,结果将匹配:

结果:

代码语言:javascript
复制
n6lp0I1w5FxLQHskKMn4sw== 

示例:

代码语言:javascript
复制
<cfset message = nullPad("1447841550", 8)>
<cfset key = "Mk9m98IfEblmPfrpsawt7BmxObt98Jev">
<!--- Important: IV values should be random, and NOT reused --->
<!--- https://en.wikipedia.org/wiki/Initialization_vector --->
<cfset iv = binaryDecode("0000000000000000", "hex")>
<cfset ciphertext = Encrypt(message, key, "DESede/CBC/NoPadding", "base64", iv)>
<cfoutput>#ciphertext#</cfoutput>
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33826486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档