V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Keita1314
V2EX  ›  PHP

PHP 中的 crypt 函数问题

  •  
  •   Keita1314 · 2015-08-13 11:35:43 +08:00 · 2319 次点击
    这是一个创建于 3186 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近学习了一下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 条附言  ·  2015-12-09 11:57:20 +08:00
    这是 PHP 中文文档翻译问题导致的一个误解,技术上文档还是建议先阅读英文
    8 条回复    2015-08-13 20:56:30 +08:00
    msg7086
        1
    msg7086  
       2015-08-13 11:40:19 +08:00
    请切换到英文版阅读。
    haiyang416
        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
    shiny
        3
    shiny  
       2015-08-13 12:43:33 +08:00   ❤️ 2
    @haiyang416 感谢召唤,已经审核了别人的 patch 并且修改了此处错误,预期在一周内同步到主站和所有镜像。

    由于志愿者们工作繁忙,可能存在手册过旧、翻译错误的情况,请务必提醒我们,官方渠道为发邮件到邮件组 [email protected]

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


    @shiny 能否请教下如何进行审核(我已经申请了cvs帐号,但是上次研究了下没有发现怎么操作。。。
    haiyang416
        6
    haiyang416  
       2015-08-13 18:23:40 +08:00
    haiyang416
        7
    haiyang416  
       2015-08-13 18:29:21 +08:00
    @jhdxr 不好意思,按错回车了。有 cvs 帐号不代表可以审核代码,Reviewer 的权限应该更高一些。
    @shiny 是 Reviewer,有权限的。因为我不是文档组成员,回答可能有误。
    shiny
        8
    shiny  
       2015-08-13 20:56:30 +08:00
    @jhdxr 在邮件组看见你账号通过的邮件啦,你用账号 jhdxr,密码为申请时填写的就可以了,Online Editor 和 svn 都可以用。 多交流 😁
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2245 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 03:58 · PVG 11:58 · LAX 20:58 · JFK 23:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.