【发布时间】:2011-12-17 03:58:36
【问题描述】:
免责声明:关于 SO 有很多类似的问题,但我正在寻找一个实用的建议,而不仅仅是一般原则。此外,请随意指出“理想”算法的实现(PHP 会很好;),但请提供具体细节(它是如何工作的)。
计算存储在数据库中的密码哈希字符串的最佳方法是什么?我知道我应该:
- 使用盐
- 多次迭代哈希过程(key stretching 的哈希链)
我正在考虑使用这样的算法:
x = md5( salt + password);
repeat N-times:
x = md5( salt + password + x );
我确信这是相当安全的,但我想到了几个问题:
在 salt 中包含用户名会有好处吗?
我决定为所有用户使用食盐,这样做有什么缺点吗?
建议的最小盐长度是多少(如果有)?
我应该使用 md5、sha 还是别的什么?
上述算法有什么问题/有什么建议吗?
...(请随时提供更多信息:)
我知道这些决定必然取决于具体情况,但我正在寻找一种解决方案:
- 提供尽可能多的安全性
- 足够快(在一台不错的机器上
那么,理想的算法应该是什么样的,最好是伪代码?
【问题讨论】:
-
对于key stretching - 我已更新问题以反映这一点。