ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:49:44 24 4
gpt4 key购买 nike

首先,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)?这个方案也不错。

我很沮丧。

最佳答案

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

  1. “CBC”模式需要 IV (初始化向量)。 PHP 代码明确提供 IV,但 CF 代码不提供。所以 encrypt() 函数随机生成一个 IV。因此结果不匹配的原因:不同的 IV,不同的结果。

  2. 当您使用“NoPadding”模式时,必须填充输入字符串,使其长度为 block 大小的偶数倍(即 DESEDE => 8)。据我了解,"...the mcrypt extension of PHP only uses ZeroPadding" . CF encrypt() 函数不支持零填充。但是,您可以使用类似 udf nullPad() 的东西来模拟它

合并这两 (2) 个更改后,结果将匹配:

结果:

n6lp0I1w5FxLQHskKMn4sw== 

示例:

<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>

关于php - Coldfusion 3DES加密使加密结果不同于PHP `mcrypt_encrypt`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33826486/

24 4 0
文章推荐: php - Laravel 事件监听器未定义的属性错误与 ShouldQueue
文章推荐: jquery - 如何防止 Mac Safari 在 contenteditable 区域右键单击选择文本
文章推荐: 基于表单答案的 Javascript 计算
文章推荐: php - Imagick::resizeImage 生成黑色图像
可可西里
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com