通常,这些是您存储密码时的选择,
>使用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.
精彩评论