什么是|当它出现在 md5() 参数中时,运算符会做什么?
What does the | operator do when it appears in the md5() parameters?
在一段原本不是我写的代码中,我发现了这个:
md5($variable1|$variable2|$variable3)
我知道代码正在使用 md5
加密某些内容。我想了解的是 |
运算符在以这种方式使用时正在做什么。
更新 1:当然不是串联。像这样对我来说很有意义:
$finalString = $variable1.$variable2.$variable3;
md5($finalString);
但是 |
是 OR 运算符。我试图理解 md5($variable1|$variable2|$variable3)
的作用,使用 |
运算符作为 md5()
方法中参数的一部分。顺便说一下,这是 PHP 代码。
管道运算符 |
表示 按位 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|2
给出与 1|2|3
相同的结果,这意味着第二个按位或不执行任何操作(因为它是一个字符串):
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不是加密,是哈希算法,完全不同
在一段原本不是我写的代码中,我发现了这个:
md5($variable1|$variable2|$variable3)
我知道代码正在使用 md5
加密某些内容。我想了解的是 |
运算符在以这种方式使用时正在做什么。
更新 1:当然不是串联。像这样对我来说很有意义:
$finalString = $variable1.$variable2.$variable3;
md5($finalString);
但是 |
是 OR 运算符。我试图理解 md5($variable1|$variable2|$variable3)
的作用,使用 |
运算符作为 md5()
方法中参数的一部分。顺便说一下,这是 PHP 代码。
管道运算符 |
表示 按位 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|2
给出与 1|2|3
相同的结果,这意味着第二个按位或不执行任何操作(因为它是一个字符串):
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不是加密,是哈希算法,完全不同