Cli*_*ote 7 php security encryption md5
什么是PHP的Md5算法的最佳替代方案,用于加密存储在MySQL数据库中的密码和其他安全数据等用户数据?
Dam*_*S8N 13
SHA512不是一个糟糕的选择.但是不久之后它就会破解大多数密码.以杰夫的建议为例.使用bcrypt或PBKDF2.它们对EC2或其他并行处理技术具有抵抗力.可能没有免疫力,但有抵抗力.
在这种情况下更好的散列不是更好的原因是ABC在MD5中变为一个值并且ABC在SHA512中变为一个值.计算所有3个字母的密码对SHA512来说实际上比对MD5更容易.关键是很难做到.这意味着一个缓慢的哈希,一个使用大量RAM,和/或一个不能在EC2上轻松完成的哈希.
最好的选择是不再单独使用密码.确定您的网站是否真的需要登录,如果是,请先尝试使用第三方提供商.如果这不是一个选项,请考虑来自RSA的密码+令牌.如果您没有其他可行选项,请仅使用密码.
散列密码时,密钥是散列(密码+盐),并且每个用户的盐需要是唯一的,并且也应该很难或不可能猜测.使用用户名符合第一个标准,并且优于每个用户没有盐或相同的盐,但每个用户的独特随机盐是更好的选择.理想情况下,在单独的数据库中,如果不是位置,则使用自己的凭据.它也应该不是键入用户名,而是键入user_id或甚至是user_id的哈希.您希望该数据库是SQL注入证明.不接受来自没有散列的用户的输入是一种很好的方法.你最好让查询本身进行散列.慢?是的,这也是一件好事.
盐本身应该包含它可以获得的所有难以预测的数据.用户名+用户ID +时间戳+来自dev/urandom的垃圾+最新的推文,其中包含单词taco.越长越好.SHA512是哈希的一个很好的选择.
摘要:hash = bcrypt(密码+ salt),salt = sha512(用户名+ user_id + timestamp + microtimestamp + dev/urandom bits +其他噪声).
如果你仍然担心这一切.随意使用SHA512加密密码.你将获得SHA512的优势,当破解时只会显示出更难以暴力加密的哈希.
试试php hash()函数http://php.net/manual/en/book.hash.php
示例代码:
$hash = hash('SHA512', $pass);
Run Code Online (Sandbox Code Playgroud)
这转变为:
SHA512("The quick brown fox jumps over the lazy dog")
Run Code Online (Sandbox Code Playgroud)
成:
0x07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6
Run Code Online (Sandbox Code Playgroud)
进一步阅读:http: //en.wikipedia.org/wiki/SHA-2
| 归档时间: |
|
| 查看次数: |
18440 次 |
| 最近记录: |