所以目前我的代码正在使用一个标准sha1
来散列数据库实现的密码。
有什么更好的、更安全的密码存储方式? 也许是 MD5(是的,我在开玩笑)
例如,我使用 Codeigniter 作为我的框架,加密密码的最佳方法是什么?
所以目前我的代码正在使用一个标准sha1
来散列数据库实现的密码。
有什么更好的、更安全的密码存储方式? 也许是 MD5(是的,我在开玩笑)
例如,我使用 Codeigniter 作为我的框架,加密密码的最佳方法是什么?
我会这样做。
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.
并在登录时使用新密码结合盐、hash_function 和迭代对其进行散列并将结果与 hashed_password 进行比较。
当然,您可以使用多个哈希函数来喜欢 sha_x(md5(salt.password).salt).salt 或任何您想要的东西,但请确保以某种方式保存它以便在登录时进行比较。
这个库非常好:http ://www.openwall.com/phpass/ 它使用 crypt 方法和各种算法,也有它自己的基于 md5 的但有很多迭代和盐,它是“安全的”。
2005 年 2 月 15 日
SHA-1 损坏
SHA-1 已损坏。不是减少轮次的版本。不是简化版。真实的东西。
Xiaoyun Wang、Yiqun Lisa Yin 和 Hongbo Yu(主要来自中国山东大学)的研究团队一直在悄悄地传播一篇描述他们结果的论文:2* 69 哈希运算中完整 SHA-1 中的碰撞,远少于基于哈希长度的 2 * 80 次操作的蛮力攻击。
2**39 次操作中 SHA-0 中的冲突。
2**33 次操作中 58 轮 SHA-1 的碰撞。
看看这个比较列表。