PHP 中的 crypt 函数问题

2015-08-13 11:35:43 +08:00
 Keita1314

最近学习了一下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的含义

2326 次点击
所在节点    PHP
8 条回复
msg7086
2015-08-13 11:40:19 +08:00
请切换到英文版阅读。
haiyang416
2015-08-13 12:20:25 +08:00
中文文档中 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
shiny
2015-08-13 12:43:33 +08:00
@haiyang416 感谢召唤,已经审核了别人的 patch 并且修改了此处错误,预期在一周内同步到主站和所有镜像。

由于志愿者们工作繁忙,可能存在手册过旧、翻译错误的情况,请务必提醒我们,官方渠道为发邮件到邮件组 doc-zh@lists.php.net

阅读英语文档固然好,也请关照下英语基础差的同学,提醒改错就已经出了自己一份力。作为维护者已经很感激了。
picasso250
2015-08-13 13:33:42 +08:00
赞楼上的态度
jhdxr
2015-08-13 17:19:01 +08:00
囧。。。上午看到这个帖子没声明反应,刚才去邮箱看到一封邮件这个是我更新的翻译但是没有过审核_(:з」∠)_


@shiny 能否请教下如何进行审核(我已经申请了cvs帐号,但是上次研究了下没有发现怎么操作。。。
haiyang416
2015-08-13 18:23:40 +08:00
haiyang416
2015-08-13 18:29:21 +08:00
@jhdxr 不好意思,按错回车了。有 cvs 帐号不代表可以审核代码,Reviewer 的权限应该更高一些。
@shiny 是 Reviewer,有权限的。因为我不是文档组成员,回答可能有误。
shiny
2015-08-13 20:56:30 +08:00
@jhdxr 在邮件组看见你账号通过的邮件啦,你用账号 jhdxr,密码为申请时填写的就可以了,Online Editor 和 svn 都可以用。 多交流 😁

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/212898

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX