当我在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'));