在MYSQL中存储密码保护密码的正确代码程序

时间:2012-08-17 06:01:05

标签: php mysql codeigniter passwords password-protection

所以目前我的代码使用标准sha1来散列数据库实现的密码。

存储密码的更安全的方法是什么? 也许MD5(是的我在开玩笑)

例如我使用Codeigniter作为我的框架,加密密码的最佳方法是什么?

3 个答案:

答案 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_pa​​ssword进行比较。

当然你可以使用多个哈希函数来喜欢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,我试图解释最重要的一点。