将多个密码存储到数据库中的最佳方法

时间:2013-06-13 13:28:42

标签: java authentication ntlm cifs

在我的数据库中,我有一个用户密码字段(User.UserPassword),我使用SHA1算法来散列用户输入,然后我用盐哈希。好的,没关系。

但现在我也在验证CIFS用户。一个CIFS协议是NTLMv1,它为我的Samba Java服务器使用16位(非常不安全)的MD4。

我无法将MD4转换为SHA1或比较这些哈希结果。所以,我需要保存两个哈希值或比较它们。所以,我可以:

  • 将MD4哈希保存到User.UserPasswordMD4。

  • 将MD4哈希保存到其他表中,例如ExternalAuthenticators

  • 保存用户全文密码并将其转换(Blargh)

  • Spring Security(我不知道该怎么做)

  • 您的选择就在这里......

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

看起来你应该存储RC4哈希值,因为客户端和服务器应该对质询字节执行相同的操作,而服务器应该比较结果。

  • 保存纯文本密码 - 不好主意,忘了它。
  • 如果将其作为PasswordMD4保存在数据库中 - 它不会比PC4更多地增加安全性。
  • 保存在其他表格中 - 与以前的版本没有什么不同。
  • Spring security - 不知道如何在这里应用。

您可以将重要或所有数据库数据存储在加密分区上,但会降低性能。

我可以建议将RC4密码存储到SHA-1字段中,但是已加密。 3DES就足够了,也许有些盐。你已经在SHA-1哈希的某个地方加盐了。 当你需要RC4哈希,来自DB的简单解密值,减去(或XOR)盐并执行通常的身份验证过程。

不要使用NTLM v1,这是旧的,不安全。