我知道,我知道,类似的问题已被问过数百万次,但由于他们中的大多数都有不同的味道,所以我得到了自己的一个。
目前,我正在开发一个旨在全国各地推出的网站,因此需要对用户系统进行某种保护。
我最近一直在阅读很多关于密码加密,散列,腌制......你说出来的名字,但在阅读了很多文章后,我感到很困惑。
有人说简单的SHA512加密对于密码是足够的,其他人说无论你做什么都必须使用“盐”,然后有些人说你应该建立一个全新的机器对于密码加密,因为没有人能够得到它。
现在我正在使用hash_hmac();
和SHA512,另外,密码获取随机SHA1盐和最后一部分,定义随机md5();键。对于我们大多数人来说,它听起来很安全,但是它呢?
我最近在这里看到,bcrypt();
(现在称为crypt();
与Blowfish哈希)是最安全的方式。在阅读关于crypt();
和相关内容的PHP手册之后,我很困惑。
基本上,问题是,我的hash_hmac();
会打败 Blowfished crypt();
,反其道而行吗?
还有一个,也许还有更安全的密码哈希选项?
答案 0 :(得分:10)
答案 1 :(得分:2)
这个问题提出了多个问题,每个问题都需要单独解决。
首先,您应该不设计自己的加密算法。事物是安全的,因为它不是主流的论点是完全无效的。您可能开发的任何算法只会与您对加密技术的理解一样强大。
普通开发人员没有掌握创建强大算法所需的数学概念,如果您的应用程序遭到入侵,那么您的完全未经测试的算法将是攻击者与您的用户个人信息之间的唯一内容,以及适当激励的攻击者可能会比你使用经过时间测试的算法更快地击败你的自定义加密。
使用盐是一个非常好的主意。由于散列是使用salt和password值生成的,因此对散列数据的暴力攻击变得过于昂贵,因为攻击者使用的散列密码字典不会考虑生成散列时使用的salt值。
我不是评论算法选择的最有资格的人,因此我会将其留给其他人。
答案 2 :(得分:1)
我不是PHP开发人员,但我有一些加密经验。我的第一个建议就是Crippledsmurf建议的,绝对不要试图“自己动手”加密。它会在整个地方写下灾难。
您说您目前正在使用hash_hmac()
。如果您只是保护用户帐户和一些基本信息(姓名,地址,电子邮件等)而不是SSN,信用卡等重要信息,我认为您可以安全地坚持使用您所拥有的信息。
通过加密,我们都喜欢最安全,最复杂的保险柜来保护我们的东西,但问题是,为什么要有一个巨大的安全门来保护没有人真正想要的东西?您必须平衡您使用的加密类型和强度与您正在保护的内容以及采取的风险。
目前,如果您正在加密您的信息,即使是在基本级别,您已经打败了90%的网站和应用程序 - 他们仍以纯文本形式存储。你正在使用一个盐(优秀的想法),你要解密信息非常困难(md5键很好)。
拨打电话 - 这值得进一步保护。如果没有,不要浪费你的时间继续前进。