所以目前我的代码使用标准sha1
来散列数据库实现的密码。
存储密码的更安全的方法是什么? 也许MD5(是的我在开玩笑)
例如我使用Codeigniter作为我的框架,加密密码的最佳方法是什么?
答案 0 :(得分:2)
我会这样做。
salt = For each user generate a random seed with a random length.
iterations = Select a random number
while(iterations != 0) {
hashed_password = hash_function(password.salt) . salt; iterations-- }
在密码字段中保存它们:
hashed_password:salt:hash_function:iterations.
登录时使用新密码结合salt,hash_function和iteration来哈希,并将结果与hashed_password进行比较。
当然你可以使用多个哈希函数来喜欢sha_x(md5(salt.password).salt).salt或者你想要什么,但要确保以某种方式保存它以便在登录时进行比较。
答案 1 :(得分:1)
这个lib非常好:http://www.openwall.com/phpass/ 它使用了各种算法的crypt方法,并且基于md5也有自己的方法,但是有很多迭代和盐,它是“安全的”。
答案 2 :(得分:1)
您应该使用 bcrypt 来哈希密码,它专为哈希密码而设计。
密码的哈希函数应该慢(需要一些计算时间)。大多数哈希算法(如SHA-1和MD5,甚至SHA-256)设计得很快,但这使它成为暴力攻击的简单目标。
不要害怕使用bcrypt!它不仅适用于高安全性站点,使用它可以像使用md5哈希一样简单。建议使用像[{3}}这样完善的库,如果你想了解它是如何工作的,你可以阅读这个phpass,我试图解释最重要的一点。