![](/img/trans.png)
[英]How to decrypt encrypted password that is stored in database when user logins through login control asp.net c#
[英]How to validate a user in asp.net web site using the existing encrypted password stored in the SQL Database?
嗨,我在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;
}
希望这可以帮助某人...
MD5是一种单向哈希,因此无法将数据库中的密码转换回纯文本。 相反,您必须使用MD5哈希算法将纯文本密码(在登录表单中输入的密码)转换为密文。
如果您肯定要以加密状态存储密码,则只需加密其纯文本密码(使用相同的密钥)并将其与数据库值进行比较即可。 苹果到苹果。 当使用相同的密钥和算法加密时,它将始终加密和解密为相同的值。
如果这似乎不能正常工作,我猜您使用的键与第一次将值存储在数据库中时所用的键不同。 仔细检查并确保加密时使用的密钥与解密时使用的密钥完全相同。 通常,我们许多人将使用计算机或用户级别的证书作为密钥,以确保该值不会被篡改或更改。
如果(相反)您正在使用MD5哈希密码,则该密码实际上并未加密。 散列完全改变了纯文本的价值,您将永远无法收回它。 这是存储密码的最安全,最智能的方法。 您只需将纯文本散列为编码值并将其保存到数据库中,然后在用户每次登录时都将其与该散列值进行比较。
我希望您正在散列而不加密。 绝对是密码存储方面的最佳实践。 它非常容易实现,并且如果您经过审核,将为您省去很多麻烦。
祝好运!
要比较MD5哈希,您需要根据用户名查询数据库,在登录名中输入,并返回已知的MD5哈希和盐(如果有的话)。 然后用已知的盐对给定的密码进行哈希处理。 然后,您可以比较两个散列是否匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.