有没有一种标准的方法来存储数据库中的密码?

时间:2012-02-06 04:45:44

标签: security active-directory passwords

所以密码不应该以纯文本形式存储,但很多人都应该这样做。对于其他人,是否存在密码存储的标准方式?我的意思是SHA1哈希或MD5哈希,如果是这样,盐的大小是多少?有没有更好的地方问这个?

我正在尝试从事目录服务的系统管理员和顾问的大脑。我试图看看是否有模式。

编辑:我想澄清一点,我并不是想学习如何更好地存储密码,而是更多地尝试查看它们存储的方式有多少以及是否有标准(如果有的话)。

3 个答案:

答案 0 :(得分:1)

MD5已经被打破了一段时间,SHA-1也有问题。

如果要存储长时间安全的哈希值,SHA-256或SHA-512(SHA-2哈希系列的一部分,设计为SHA-1的安全替代品)是很好的选择,在128到256位盐之间是标准的。

然而,现在使用普通哈希并不是最好的方法。 自适应哈希值是专为此类存储设计的,因为计算结果所需的时间可以通过额外的计算减慢速度。这是一个非常重要的特性,必须防止对存储的密码进行暴力攻击。自适应散列的强大且标准的实现是bcrypt,基于对Blowfish加密算法的修改,使其适用于此目的(which is explained well here)。

答案 1 :(得分:0)

应对密码进行哈希处理,并将哈希值存储在数据库中。 但是,SHA *和MD5的散列算法太快,无法用于散列密码。 对于散列密码,理想情况下你需要更慢的东西,这些东西不适合暴力/彩虹表攻击。

你可以确保在存储哈希值之前散列密码1000次以使其时间和计算密集,但是当你有像bcrypt这样的算法为你做这项工作时,为什么还要这么做呢。

您应该使用bcrypt来哈希密码。阅读更多相关信息 http://codahale.com/how-to-safely-store-a-password/

在bcrypt中,由于salt被附加到哈希 - 你甚至不需要在表中使用两列'password_hash'和'salt'。只是'password_hash'。杂乱越少越好。

答案 2 :(得分:-1)

你可以看到this question得到盐应该多长的答案(128-256位似乎是共识)。

就使用什么算法而言,你绝对应该使用SHA1。 MD5很久以前就被认为是破碎的,尽管它仍然是常用的(见wikipedia MD5