【问题标题】:What does the | operator do when it appears in the md5() parameters?什么|运算符出现在 md5() 参数中时会做什么?
【发布时间】:2019-05-19 04:47:33
【问题描述】:

在一段原本不是我写的代码中,我发现了这个:

md5($variable1|$variable2|$variable3)

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

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

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

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

【问题讨论】:

  • $variable1(等等)包含什么样的值? | 是一个按位 OR,所以如果它们是数值,它可以完全按预期运行。
  • $variable1$variable2 是数字 ID,例如 24323234322$variable3 是一个随机字符串,例如adtw2GEt4PrPghhfLApae
  • 我想我现在明白了。作为按位或,它所做的只是使加密的值更难破译,因为它不仅依赖于单个变量的md5() 加密,而且它对多个变量的组合进行按位或,使得加密的字符串更难破译。
  • 你的问题没有加密,只有散列。
  • 查看我对您评论的回复。在这种情况下,123'123' 之间没有区别。

标签: php parameters operators md5 or-operator


【解决方案1】:

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

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

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

$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 相同的结果,这意味着第二个按位 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 不是加密:我注意到您在 cmets 中提到了加密。 MD5不是加密,是散列算法,完全不同。

【讨论】:

  • 我明白了。在代码中我收到$variable1$variable2 作为URL 参数,所以即使我认为它是$variable1 = 2432;$variable2 = 3234322;$variable3 = 'adtw2GEt4PrPghhfLApae';,我认为实际上我有这样的字符串:$variable1 = '2432';$variable2 = '3234322';$variable3 = 'adtw2GEt4PrPghhfLApae';。在这种情况下,当所有三个变量 $variable1$variable2$variable3 都是字符串时,使用 OR 运算符(如您在答案中的 md5 1|2|3 行中所示)是有意义的,对吗?
  • @JaimeMontoya 不管是字符串还是整数,| 运算符都会先将其参数转换为整数。
  • $variable3 = 'adtw2GEt4PrPghhfLApae' 这样的非数字字符串被转换为0
  • @Barmar 你是对的。 0OR 运算符相当于不包括 0。如果它是 AND 运算符,它只会影响某些东西。
猜你喜欢
  • 2020-02-07
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2011-12-11
  • 1970-01-01
相关资源
最近更新 更多