美文网首页
php 加密与哈希

php 加密与哈希

作者: 云龙789 | 来源:发表于2019-02-26 12:08 被阅读3次

    我们应该知道计算机用户密码的哈希值,而不能加密用户的密码。加密和哈希不是一回事。加密是双向算法,加密的数据以后可以解密。而哈希是单项算法,哈希后的数据不能再还原成原始值,而且相同的数据得到的哈希值始终相同。

    在数据库中存储用户的密码时,要先计算密码的哈希值,然后在数据库中存储密码的哈希值。如果黑客攻入了数据库,他们只能看到毫无意义的密码哈希,需要花费大量的时间和 NSA 资源才能破解。
    哈希算法有很多种(例如MD5、SHA1、bcrypt、和scrypt)。有些算法的速度很快,用于验证数据的完整性;有些算法的速度则很慢,旨在提高安全性。生成密码和存储密码时需要使用速度慢、安全性高的算法。

    目前,经同行审查,最安全的哈希算法是 bcrypt。bcrypt 算法永不过时,如果计算机的速度变快了,我们只需要提高工作因子的值

    其实我们存储的是密码的哈希值

    $str = 123456;
    $password = password_hash($str, PASSWORD_DEFAULT, ['cost' => 10]);
    参数1,是纯文本密码
    参数2,是PASSWORD_DEFAULT常量,也有其他选项,是必填字段
    参数3,这个数组中 cost 键用于设定 bcrypt 的工作因子。工作时的默认值是10,
    不过你应该根据自己的硬件计算能力提高这个值。我自己测试大于12就会变得慢。正常来说10就可以。
    
    $str = 123456;
    $password = password_hash($str, PASSWORD_DEFAULT, ['cost' => 10]);
    // 验证密码哈希值
    echo password_verify($str, $password); // 1
    
    // 如果需要重新计算尼玛的哈希值  password_needs_rehash() 函数确认用户记录中的密码哈希值是否符合
    // 最新的密码算法项是否符合最新的计算哈希值,然后使用哈希值更新用户记录,cost 这个值只能变大,不能变小
    echo password_needs_rehash($str, PASSWORD_DEFAULT, ['cost' => 11]); //1
    
    echo password_verify($str, $password); //1
    验证不会因为你哈希时候的因子不同而验证失败。因子是哈希算法的一部分
    

    相关文章

      网友评论

          本文标题:php 加密与哈希

          本文链接:https://www.haomeiwen.com/subject/fyfayqtx.html