什么是|运算符在md5()参数中出现时怎么办?

时间:2018-12-18 17:54:33

标签: php parameters operators md5 or-operator

在最初不是我编写的一段代码中,我发现了这一点:

md5($variable1|$variable2|$variable3)

我知道代码正在使用md5加密某些内容。我想了解的是|运算符在以这种方式使用时在做什么。

更新1:这当然不是串联的。像这样对我来说很有意义:

$finalString = $variable1.$variable2.$variable3;
md5($finalString);

但是|是OR运算符。我正在尝试使用md5($variable1|$variable2|$variable3)运算符作为|方法内参数的一部分来了解md5()的作用。顺便说一下,这是PHP代码。

1 个答案:

答案 0 :(得分:1)

管道运算符|表示三个变量之间正在发生按位 OR。

但是,如果$variable3是您所指出的文字,那么我不明白您为什么要这么做。

看看下面的代码。它利用您在评论中发布的示例数据:

$variable1 = 2432;
$variable2 = 3234322;
$variable3 = 'adtw2GEt4PrPghhfLApae';

echo '1: ' . $variable1 . '<br />';
echo '2: ' . $variable2 . '<br />';
echo '3: ' . $variable3 . '<br /><br />';

echo '1|2: ' . ($variable1 | $variable2) . '<br />';
echo '1|2|3: ' . ($variable1 | $variable2 | $variable3) . '<br /><br />';

echo '1.2: ' . ($variable1 . $variable2) . '<br />';
echo '1.2.3: ' . ($variable1 . $variable2 . $variable3) . '<br /><br />';

echo 'md5 1|2|3: ' . md5($variable1|$variable2|$variable3) . '<br />';
echo 'md5 1.2.3: ' . md5($variable1.$variable2.$variable3) . '<br />';

您将立即看到1|21|2|3的结果相同,这意味着第二个按位OR不会执行任何操作(因为它是字符串):

1|2: 3234706
1|2|3: 3234706

如果您将所有三个变量都视为一个字符串,那么您将得到完全不同的MD5哈希,如您所愿:

md5 1|2|3: fdea81fcefba5a598cf3124d7dbf3854
md5 1.2.3: 8cc6383034ed459ad7a135fcb8cb86de

因此md5($variable1|$variable2|$variable3);md5(3234706);(只是$variable1|$variable2)相同,甚至不使用第三个变量。

MD5不是加密:我注意到您在注释中提到了加密。 MD5不是加密,它是一种哈希算法,完全不同。