美文网首页
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 加密与哈希

    password_hash 摘自 Modern PHP 这本书 我们应该知道计算机用户密码的哈希值,而不能加密用户...

  • 数据加密

    单向散列:哈希加密。 PHP MD5函数 加密长度是64/32位的。MD5("这里是加密串")MD5($POST...

  • Android 对称加密与非对称加密与摘要算法

    对称加密 与 非对称加密 与 哈希算法 对称加密 : 加密和解密使用相同的密钥。 优点:加密简单,加密效率高。缺点...

  • 哈希 加密

    哈希 加密

  • 哈希、堆

    一、哈希 MD5 哈希算法不是加密的,因为加密对应的是还可以解密,也就是可逆。 对称加密和非对称加密 对称加密不安...

  • Python MD5加密算法及对称与非对称加密算法

    1.1 加密算法分类 加密算法主要分为:哈希算法、对称加密算法、非对称加密算法。 哈希算法:如:MD5/SHA25...

  • PHP/JS 互通加密-解密

    场景:服务端Php与前端Js 实现互通加密/加密 php7.1以后mcrypt_encrypt将被废弃,所以使用o...

  • 哈希与加密算法

    常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。 (1)对称加密指加密和解密使用相同密钥的...

  • 4.加密函数编写

    加密算法分类: md5系列加密 ,哈希算法类型 aes加密对称加密,加密/解密是一个密钥 rsa加密 非对称加密,...

  • 前端学习笔记十九-MongoDB+Express开发项目知识点

    一、密码加密 bcrypt 哈希加密是单程加密方式:1234 => abcd在加密的密码中加入随机字符串可以增加密...

网友评论

      本文标题:php 加密与哈希

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