最近学习了一下PHP,PHP手册中有
<?php
$password = crypt('mypassword'); // 自动生成盐值
if (crypt($user_input, $password) == $password) {
echo "Password verified!";
}
?>
crypt(str,salt)不应该返回str用salt加密的字符串吗,为什么例子这里返回的还是$password?如果是这样用,这应该是个验证函数吧,验证$str是否用$salt加密?不理解PHP中crypt的含义
1
msg7086 2015-08-13 11:40:19 +08:00
请切换到英文版阅读。
|
2
haiyang416 2015-08-13 12:20:25 +08:00 2
中文文档中 hash 比较方式不推荐使用了,请参考英文文档,使用用 hash_equals。
楼主你应该误解了示例中的代码, 使用 crypt 加密时,同样的字符串,使用同样的 salt,加密结果是一样的, 示例中的 $password 其实是之前已经 hash 过的,也就是英文版中的 $hashed_password, $hashed_password 字符串的前面一部分就是之前使用的 salt, crypt 函数并不会把整个 $hashed_password 作为新的 salt,它只会截取 $hashed_password 的 salt 部分, 因此,只要 $user_input 是正确的密码,又使用了和 $hashed_password 相同的 salt,输出的结果肯定是和 $hashed_password 一样。 具体的实现代码见: http://lxr.php.net/xref/PHP_5_3/ext/standard/crypt.c#150 不过现在已经不推荐直接使用 crypt 加密密码了,可以直接使用 password_hash 与 password_verify 来加密和验证密码。 我看了一下,crypt 中文文档被别人修改了还未通过审核,所以暂时无法修订过时的东西,不过可以召唤文档组成员进行修订 @shiny 。 |
3
shiny 2015-08-13 12:43:33 +08:00 2
@haiyang416 感谢召唤,已经审核了别人的 patch 并且修改了此处错误,预期在一周内同步到主站和所有镜像。
由于志愿者们工作繁忙,可能存在手册过旧、翻译错误的情况,请务必提醒我们,官方渠道为发邮件到邮件组 [email protected] 阅读英语文档固然好,也请关照下英语基础差的同学,提醒改错就已经出了自己一份力。作为维护者已经很感激了。 |
4
picasso250 2015-08-13 13:33:42 +08:00
赞楼上的态度
|
5
jhdxr 2015-08-13 17:19:01 +08:00
囧。。。上午看到这个帖子没声明反应,刚才去邮箱看到一封邮件这个是我更新的翻译但是没有过审核_(:з」∠)_
@shiny 能否请教下如何进行审核(我已经申请了cvs帐号,但是上次研究了下没有发现怎么操作。。。 |
6
haiyang416 2015-08-13 18:23:40 +08:00
|
7
haiyang416 2015-08-13 18:29:21 +08:00
|