使用crypt()进行PHP河豚哈希运算:CLI结果与网络服务器的结果不同
作者:互联网
当我通过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中也被解释为positional parameters.
当您逃脱它们时,它将按预期工作:
$php -r "echo crypt('SAD123', sprintf('\$2a\$10$%s', '7711cbpe58dfpogiu049857f011werb0'));"
因此,当您想在命令行中修改一些PHP时,应该以交互方式运行它:
$php -a
php > echo crypt('SAD123', sprintf('$2a$10$%s', '7711cbpe58dfpogiu049857f011werb0'));
标签:crypt,blowfish,php 来源: https://codeday.me/bug/20191029/1957386.html