C# - 存储用户密码以进行比较

本文关键字:比较 密码 存储 用户 | 更新日期: 2023-09-27 18:31:38

我正在将用户登录加密密码存储在数据库(SQL Server)中。由于 API 限制,密码需要在 C# 端加密,因此我无法使用数据库的内置加密。加密这些密码的最快/最简单的方法是什么,以便我可以将它们与用户稍后在第三方服务中输入的密码进行比较?

我是 C# 的新手,我知道密码永远不应该是纯文本,所以这就是为什么我想确保我有最高的安全性。我尝试过使用 RSA.EncryptValue() 函数,但我对如何正确使用它感到非常迷茫。

任何帮助都值得赞赏 - 提前感谢。

-吉 米

C# - 存储用户密码以进行比较

您不想加密和存储密码。 您想生成一个哈希并存储它。 然后,当用户登录时,重新生成哈希并将其与数据库中存储的哈希进行比较。

此问题的答案提供了如何在 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提到的生成一个哈希。希望这能对可用的不同内容有所了解