5

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

有什么更好的、更安全的密码存储方式? 也许是 MD5(是的,我在开玩笑)

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

4

4 回答 4

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.

并在登录时使用新密码结合盐、hash_function 和迭代对其进行散列并将结果与​​ hashed_pa​​ssword 进行比较。

当然,您可以使用多个哈希函数来喜欢 sha_x(md5(salt.password).salt).salt 或任何您想要的东西,但请确保以某种方式保存它以便在登录时进行比较。

于 2012-08-17T06:18:44.323 回答
1

这个库非常好:http ://www.openwall.com/phpass/ 它使用 crypt 方法和各种算法,也有它自己的基于 md5 的但有很多迭代和盐,它是“安全的”。

于 2012-08-17T06:48:59.643 回答
1

你真的应该使用bcrypt来散列你的密码,它是专门为散列密码而设计的。

密码的哈希函数应该很(需要一些计算时间)。大多数哈希算法(如 SHA-1 和 MD5 甚至 SHA-256)都被设计为速度很快,但这使得它很容易成为暴力攻击的目标。

不要害怕使用 bcrypt!它不仅适用于高安全性站点,而且使用起来就像使用 md5 哈希一样简单。建议使用像phpass这样完善的库,如果你想了解它的工作原理,可以阅读这篇文章,我试图解释最重要的点。

于 2012-08-17T20:46:54.527 回答
0

SHA1 在 2005 年被破坏

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 的碰撞。

看看这个比较列表

于 2012-08-17T06:07:16.740 回答