C# - 存储用户密码以进行比较
本文关键字:比较 密码 存储 用户 | 更新日期: 2023-09-27 18:31:38
我正在将用户登录加密密码存储在数据库(SQL Server)中。由于 API 限制,密码需要在 C# 端加密,因此我无法使用数据库的内置加密。加密这些密码的最快/最简单的方法是什么,以便我可以将它们与用户稍后在第三方服务中输入的密码进行比较?
我是 C# 的新手,我知道密码永远不应该是纯文本,所以这就是为什么我想确保我有最高的安全性。我尝试过使用 RSA.EncryptValue()
函数,但我对如何正确使用它感到非常迷茫。
任何帮助都值得赞赏 - 提前感谢。
-吉 米
您不想加密和存储密码。 您想生成一个哈希并存储它。 然后,当用户登录时,重新生成哈希并将其与数据库中存储的哈希进行比较。
此问题的答案提供了如何在 c# 中对密码进行哈希处理的示例(一个答案包括有关执行"加盐"哈希的信息)。
加密; 哈希。其次不要加密;散 列。
密码永远不可恢复。
我建议阅读...http://www.troyhunt.com/2010/05/owasp-top-10-for-net-developers-part-1.html从前到后。
你应该使用一个体面的哈希算法来加盐你的密码和哈希;以SHA512为低端,或者如果你认真对待保护这些数据,看看更像BCrypt http://code.google.com/p/bcryptnet/
散列而不是加密的重点不是保护您的网站免受暴力攻击,而是保护您的用户免受数据丢失。
即http://www.bbc.co.uk/news/technology-11998648 - 高克https://www.google.co.uk/search?sourceid=chrome&ie=UTF-8&q=sony+hacked
人们将信任放在Web开发人员手中,以处理他们的密码,通常是可怜的密码。照顾好它们可以产生很大的不同。
使用 BCrypt,您可以为盐渍设置一个工作因子;我还会添加一个数据库盐(请参阅有关 MSFT 如何执行此操作的特洛伊亨特成员资格提供程序文章)以增加原始密码值。
BCrypt 站点中的示例(BCrypt.net 也是一个 NUGET 包)
// Pass a logRounds parameter to GenerateSalt to explicitly specify the
// amount of resources required to check the password. The work factor
// increases exponentially, so each increment is twice as much work. If
// omitted, a default of 10 is used.
string hashed = BCrypt.HashPassword(password);
// Check the password.
bool matches = BCrypt.CheckPassword(candidate, hashed);
希望有用。
当然,您可以使用内置的表单身份验证加密系统来加密/解密您的数据。尽管加密密码介于愚蠢和危险之间。
- http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.encrypt.aspx
- http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.decrypt.aspx
您还需要在Web配置中添加一个machineKey标签,Microsoft为此提供了一个生成器; http://aspnetresources.com/tools/machineKey 该工具创建一个 256 位解密密钥和一个 512 位验证密钥,使用 Rijndael 作为数据验证算法。
如果你确实需要(如果你不这样做,你就会被枪杀)开始抛出明文密码,对于所有神圣的事情,请检查服务是否受到 IP (IPSec) 的限制,亲爱的上帝,请使用 SSL。
就像Steve Wellens提到的生成一个哈希。希望这能对可用的不同内容有所了解