盐渍密码散列。我在ASP.NET环境中做得对吗?
我正在用ASP.NET开发一个网站。我想为我的用户实现登录身份验证。我使用SALT散列方法将用户密码安全地保存到数据库中。通过查看各种代码,我编写了如下代码来生成SALT和散列密码,以存储在数据库中盐渍密码散列。我在ASP.NET环境中做得对吗?,asp.net,hash,salt,saltedhash,Asp.net,Hash,Salt,Saltedhash,我正在用ASP.NET开发一个网站。我想为我的用户实现登录身份验证。我使用SALT散列方法将用户密码安全地保存到数据库中。通过查看各种代码,我编写了如下代码来生成SALT和散列密码,以存储在数据库中 private string hashedPassword; private string Salt; private string SaltPlusPassword; private const byte saltSize = 24; byte[] salt
private string hashedPassword;
private string Salt;
private string SaltPlusPassword;
private const byte saltSize = 24;
byte[] saltArray;
byte[] hashedPasswordArray;
byte[] bytes;
public void Save_Login(string passWord)
{
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
saltArray = new byte[saltSize];
rng.GetBytes(saltArray);
}
Salt = Convert.ToBase64String(saltArray);
SaltPlusPassword = String.Format("{0}{1}", Salt, passWord);
using (SHA256 sha = SHA256.Create())
{
bytes = Encoding.UTF8.GetBytes(SaltPlusPassword);
hashedPasswordArray = sha.ComputeHash(bytes);
}
hashedPassword = Convert.ToBase64String(hashedPasswordArray);
}
//盐将保存到DB
//hashedPassword将保存到数据库
所以我有几个问题
我在一篇文章中读到,make your salt至少和hash函数的输出一样长。我的代码中声明的saltArray、hashedPasswordArray和bytes数组的大小是多少?我使用的数组大小为24。可以吗
2如果我使用,会发生什么
字节=Encoding.Unicode.GetBytesSaltPlusPassword
而不是
字节=Encoding.UTF8.GetBytesSaltPlusPassword
3我应该使用什么数据类型在数据库中存储salt和哈希密码?我的数据库是MYSQL
4如果我使用SHA256Managed而不是SHA256,性能会有什么不同吗?哪一个最好
5最后,我这样做对吗?上述代码中有哪些弱点?您有什么建议?与其解决所有这些问题,不如使用ASP.NET提供的内置身份管理工具。看这里
更常见、更健壮。这与保护用户密码有什么关系因为它将为您保护用户的密码。这是实际的方法。你要使用saltcode静态吗?没有arijit。这不是一个静态的salt代码。它是使用RNGCryptoServiceProvider随机生成的。那么为什么要将它存储到数据库中呢?Arijit,我认为您应该阅读更多有关salt密码哈希的信息。这是给你的链接。Salt应该是随机生成的,您必须在用户的数据库记录中保存Salt和哈希。我从不保存W Salt密码。在这种情况下,我通常会将哈希密码存储在db中获取密码在我的应用程序中生成Salt在用户尝试登录时添加密码和Salt哈希密码和Salt使用jquery并将该数据发送到我的应用程序,因此传递的密码总是不同的