代码之家  ›  专栏  ›  技术社区  ›  Jaime Montoya

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

  •  0
  • Jaime Montoya  · 技术社区  · 6 年前

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

    md5($variable1|$variable2|$variable3)
    

    我知道代码正在使用 md5 | 以这种方式使用时,操作员正在执行此操作。

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

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

    但是 | md5($variable1|$variable2|$variable3) | 运算符作为 md5()

    1 回复  |  直到 6 年前
        1
  •  1
  •   Martin Joseph Silber    6 年前

    管道操作员 | 表示 按位

    然而,如果 $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不是加密,它是一种哈希算法,这是完全不同的。