代码之家  ›  专栏  ›  技术社区  ›  baloo

不同PHP版本上的sha1校验和不同?

  •  2
  • baloo  · 技术社区  · 16 年前

    我运行这个脚本:

    define('SECRET', "vJs;ly-W\XDkD_2'-M7S2/ZRRBobxt5");
    echo sha1(SECRET . 'zcbkeyky' . 'aaa@bbb.com') . "\n";
    

    在本地使用php 5.3.2(cli),它给出了: 3baa47e50394cd2dce236dcbf2f409fdb9010f2a
    在使用php 5.1.6(cli)的远程计算机上,它提供: d1bcf4ea83e50593d3df19a8455a5f5cd32d63ef

    为什么相同的计算方法不同?

    2 回复  |  直到 16 年前
        1
  •  9
  •   Piskvor left the building Rohit Kumar    16 年前

    我想说问题出在这里:

    define('SECRET', "vJs;ly-W\XDkD_2'-M7S2/ZRRBobxt5");
    //                        ^^-- escape character
    

    PHP manual 说:

    \x[0-9A-Fa-f]{1,2} 与正则表达式匹配的字符序列是十六进制表示法中的字符。

    在php 5.2和5.3之间,显然这也被修改为匹配 \X[0-9A-Fa-f]{1,2} (注意开头的大写x)。在php 5.3中运行时,您有(不知道吗?)一个回车在你的字符串中。

    a)用另一个字符替换反斜杠,或b)在定义secret时使用单引号,两个版本将返回相同的哈希(在5.2.1和5.3.2上尝试)。

        2
  •  2
  •   Lizard    16 年前

    我唯一能想到的是对每台服务器上的文件/字符串进行编码?

    我的结果是3baa47e50394cd2dce236dcbf2f409fdb9010f2a(本地)

    推荐文章