运维开发网

安全性 – SHA512和MD5散列

运维开发网 https://www.qedev.com 2020-07-15 10:57 出处:网络 作者:运维开发网整理
有一段时间我一直在寻找一种更安全的方法来在我的网站上散列用户密码,以便插入到数据库中.我已经研究了所有可用的散列方法.有人说bcrypt是最好的,因为它的速度很慢.我在想,如果我不需要最高的安全性,但仍然保持安全.如果我在该哈希上使用sha512然后使用md5会怎么样?如果我改变了哈希的顺序,这有关系吗?请记住,我将为每个操作使用单独的盐.这有多安全?是否有其他组合可以做同样的事情? 您发明的任何
有一段时间我一直在寻找一种更安全的方法来在我的网站上散列用户密码,以便插入到数据库中.我已经研究了所有可用的散列方法.有人说bcrypt是最好的,因为它的速度很慢.我在想,如果我不需要最高的安全性,但仍然保持安全.如果我在该哈希上使用sha512然后使用md5会怎么样?如果我改变了哈希的顺序,这有关系吗?请记住,我将为每个操作使用单独的盐.这有多安全?是否有其他组合可以做同样的事情? 您发明的任何自定义方法都更容易出现使您的存储方法容易受到攻击的细微错误.这是不值得的,因为你不太可能找到这些微妙的错误,直到为时已晚.使用经过试验和测试的东西要好得多.

通常,这些是您存储密码时的选择,

>使用bcrypt.

>使用盐渍,强化哈希.

第一种方法很简单,只需使用bcrypt即可.它几乎支持任何语言,并且已被广泛使用和测试以确保其安全性.

第二种方法要求您使用通用散列函数(SHA-2系列或更好,而不是MD5或SHA-1作为they’re broken/weak)或更好,HMAC,为用户创建一个独特的盐和一个独特的应用程序范围的盐,然后多次迭代哈希函数(100,000等)以减慢它(称为key stretching/strengthening).

例如(伪代码)

sofar = hash("sha512", user_salt + site_salt + input_password);
iterations = 100000; // Should be changed based on hardware speed
while (iterations > 0)
{
    sofar = hash("sha512", user_salt + site_salt + sofar);
    iterations--;
}
user.save("password", "$sha512$" + user_salt + "$" + iterations + "$" + sofar);

每次迭代都应该依赖于前一次迭代,因此有人无法并行化强力方法来破解它.同样,应根据硬件的速度更改迭代次数,以便进程足够慢.密码散列问题越慢越好.

摘要

使用bcrypt.

0

精彩评论

暂无评论...
验证码 换一张
取 消