密码存储到SQL最佳方式(Best way to store password into sql)

2019-09-23 04:51发布

在我目前的C#Windows应用程序的密码已明文存储这显然是不好的。 所以我只是想知道什么是对密码进行加密并存储到SQL Server的最佳方式。 我已阅读,使用哈希+盐是更好的。 但我觉得“EncryptByPassPhrase”,在SQL“DecryptByPassPhrase”新功能,2005年是更好地使用,因为你是从SQL Server本身处理一切,我想它使用三重DES。 可有人建议是不是很好用呢?

Answer 1:

您是否需要访问原来的密码,或者你只是要尝试对一个数据库进行比较的输入的密码?

如果您需要访问原始密码,那么你将不得不使用的加密算法,而不是一个散列算法。

如果你正在做的是在数据库中存储密码,以便以后可以查看它与已知的输入值,然后与盐散列将工作。

请记住,当客户端跨发送证书进行验证,您不希望以明文发送密码!



Answer 2:

哈希和盐是要走的路,因为它不可能从它找回原来的密码。 如果您加密然后解密密码,明文密码是可回收所以它不是最好的。



Answer 3:

我同意这很有意义的加密都在1处。 但是,如果你单独从数据的密钥(在C#代码键,在DB数据),这会增加安全性。 此外,SQL Server将加密的时候,这意味着如果你需要恢复数据到新的服务器使用一个主键,你就会有麻烦恢复数据。

这一切都归结为密钥管理,以及如何你想这样做。



Answer 4:

与大多数问题最好的答案取决于你的情况的背景。 有没有好的解决办法。

一些选项:

  1. 留在纯文本或的可逆加密的密码。 使用SQLServer的设施,以重要领域在RDBMS级别加密或使用similiar加密功能,并希望MS已经实施了合理的密钥管理和密钥对你的目的相当安全的。 在实践中,所有加密确实是一大堆小秘密成一个大秘密存储的崩溃存储。它可能使问题变得更加易于管理,但问题本身永远不会消失。

  2. Irreversably“加密”使用散列算法或某种形式的隐窝密码()。 根据不同的攻击媒介可用这种方法可能不会超过明文存储安全的实际改良效果的方式提供多少。

。 散列密码的使用限制在安全认证算法的选择方面你的选择。 通过这种方法,你将有可能最终发送明文或其他材料没有更好的在运输(无论是否使用未绑定加密与否),这可以从信托POV巨大风险。

。 Succeptable离线如果散列密码被盗的某些部分的恢复应该,如果他们有一个攻击者任意值完全承担字典攻击。

。 在某些情况下,密码哈希的知识一样可以在系统准入方面知道密码的那样糟糕。



Answer 5:

如果你确信你将永远不会使用散列方案进行验证(如HTTP摘要身份验证),哈希密码更安全。 为了避免彩虹表攻击,请使用随机数(或盐)。 我将使用HMAC-SHA1,并使用随机数作为密钥。 这些密钥必须与存储密码。

否则,你将不得不存储加密的密码,因为哈希密码不能与认证涉及哈希工作。 对于加密,我有以下的建议,

  1. 不要存放在DB的关键,没有任何硬编码。 它存放一些其他安全的地方,就像在Windows中使用DPAPI。
  2. 请确保你有一个关键的版本,所以你可以旋转的关键,符合一定的标准。
  3. 我不熟悉SQLServer中加密。 请确保它具有随机初始向量。 您可以通过加密两次相同的密码进行检查,它应该产生不同的加密。 如果没有随机IV,不使用它,只是在你的应用程序加密。


文章来源: Best way to store password into sql