如何使用存储在SQL数据库中的现有加密密码在asp.net网站中验证用户
本文关键字:asp 密码 net 网站 用户 验证 加密 存储 何使用 SQL 数据库 | 更新日期: 2023-09-27 18:00:31
嗨,我在我的asp.net网站上使用MD5加密选项,它使用MD5密码将密码存储到数据库中。所以,当我想使用用户注册期间输入的凭据登录时,我很难将数据库中的现有密码与我登录时输入的当前密码进行比较。由于存储的密码是加密的,我很困惑如何将加密格式与文本格式进行比较?
我正在使用Sqlserver作为我的数据库。
除了@Jason说的。。。我喜欢在密码上加盐。
public static string CreateSalt(int byteSize)
{
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] buff = new byte[byteSize];
rng.GetBytes(buff);
return Convert.ToBase64String(buff);
}
public static string CreatePasswordHash(string pwd, string salt)
{
string saltAndPwd = String.Concat(pwd, salt);
string hashedPwd = FormsAuthentication.HashPasswordForStoringInConfigFile(saltAndPwd, "sha1");
return hashedPwd;
}
- 当用户初始创建时,以下是过程
- 创建盐=>CreateSalt(16)
- 使用密码和salt创建哈希=>CreatePasswordHash(passwordEntered,salt)
- 存储哈希密码和salt
- 下次用户登录时,根据他们在登录表单中输入的内容验证存储的凭据=>字符串enteredPasswordHash=CreatePasswordHash(enteredPassword,saltFromDatabase)
- 与数据库中的内容进行比较=>if(passwordHashInDatabase!=enteredPasswordHash)=>错误的登录凭据
希望这能帮助到别人。。。
MD5是单向散列,因此数据库中的密码无法转换回纯文本。相反,您必须使用MD5哈希算法将纯文本密码(在登录表单中输入的密码)转换为密码文本。
要比较MD5哈希,您需要根据登录中输入的用户名查询数据库,并返回已知的MD5哈希和salt(如果有)。然后用已知的salt对给定的密码进行散列。然后,您可以比较这两个哈希来匹配。
如果您确实以加密状态存储密码,那么您只需要加密他们的明文密码(使用相同的密钥)并将其与数据库值进行比较。公平的比较当使用相同的密钥和算法进行加密时,它将始终加密和解密到相同的值。
如果这似乎不能正常工作,我猜您使用的密钥与第一次将值存储在数据库中时使用的密钥不同。仔细检查并确保加密的密钥与解密的密钥完全相同。通常,我们中的许多人会使用机器或用户级别的证书作为密钥,以确保值不会被篡改或更改。
如果(相反)你使用MD5对密码进行散列,那么它实际上并没有加密。哈希会完全破坏明文值,您将永远无法将其恢复。这是存储密码最安全、最聪明的方式。您只需将明文散列成一个编码值并将其保存到数据库中——然后,您可以在用户登录时与该散列值进行比较
我希望你是在散列而不是加密。在密码存储方面,这绝对是一种最佳做法。它很容易实现,如果你接受过审计,它会帮你省去麻烦。
祝你好运!