php使用crypt()进行blowfish哈希:CLI结果与webserver';是的


php blowfish hashing with crypt(): the CLI result differs from webserver's one

当我在web服务器上使用Blowfish算法使用php函数crypt()时

<?php
    echo crypt('SAD123', sprintf('$2a$10$%s', '7711cbpe58dfpogiu049857f011werb0'));

我得到这个结果:

$2a$10$7711cbpe58dfpogiu0498u5Vh773A3qx.3LE3ro3NX7F9c9N7.pOm

但是,如果我使用带有命令行的PHP解释器:

php -r "echo crypt('SAD123', sprintf('$2a$10$%s', '7711cbpe58dfpogiu049857f011werb0'));"

我得到了另一个结果:

a0SqNHxQ8/2mA

你有什么想法吗?

该系统是:Apache/2.2.3(CentOS),PHP版本5.4.26

这是因为命令字符串中带有以下数字的美元符号也被解释为bash中的位置参数。

当你逃离他们时,它会像预期的那样工作:

$ php -r "echo crypt('SAD123', sprintf(''$2a'$10$%s', '7711cbpe58dfpogiu049857f011werb0'));"

因此,当你想在命令行中修改一些PHP时,你应该只以交互方式运行它:

$ php -a
php > echo crypt('SAD123', sprintf('$2a$10$%s', '7711cbpe58dfpogiu049857f011werb0'));