前言
在使用PHP开发Web应用的中,很多的应用都会要求用户注册,而注册的时候就需要我们对用户的信息进行处理了,最常见的莫过于就是邮箱和密码了,本文意在讨论对密码的处理:也就是对密码的加密处理。
密码安全的重要性我们就不用再去强调,随着在线攻击的增多,如果我们对密码没有进行合适的处理或做防御措施,我们的应用就会肯定会收到来自各方的威胁和攻击。
所以作为开发者,我们需要对用户的密码做好预防措施。
关于密码我们应该遵守的一些原则
绝对不能知道用户的密码
绝对不去约束用户的密码
绝对不通过电子邮件发送用户的密码
对于一个web应用来说,重置或修改密码时,我们应该在邮件里发送用于设定或修改密码的 URL 。而且这个URL中应该会包含一个唯一的令牌,这个令牌只能在设定或修改密码时使用一次。在设定或修改密码之后,我们就应该把这个令牌置为失效。
使用 bcrypt 计算用户密码的哈希值
目前,通过大量的审查,最安全的哈希算法是 bcrypt 。
首先,我们明确两个概念,哈希、加密。哈希和加密有什么区别?
加密
加密是双向算法,加密的数据之后通过解密还可以得到。
哈希
哈希是单向算法,哈希后的数据不能再还原成原始值。
哈希算法的用途,
验证数据的完整性(要求算法速度快)
哈希的算法有很多种,
MD5
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
SHA1
安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。 SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要,(但会有1x10 ^ 48分之一的机率出现相同的消息摘要,一般使用时忽略)。
新闻热点
疑难解答