Dev*_*Dev 1 c# sql-server asp.net sql-server-2008-r2
我password
用string
数据类型存储我的数据库表列.在将其存储到数据库之前,我正在Hash encoded
使用下面的c#方法:
public static string Md5Encrypted(string password)
{
byte[] pass = Encoding.UTF8.GetBytes(password);
MD5 md5 = new MD5CryptoServiceProvider();
string strPassword = Encoding.UTF8.GetString(md5.ComputeHash(pass));
return strPassword;
}
Run Code Online (Sandbox Code Playgroud)
现在我想compare
插入新密码时想要它.
为此,我从数据库中获取特定用户的记录,并以字符串形式获取其现有的编码密码.如果我使用相同的密码,那么它也不匹配.例如,如果我adgjl135
作为密码传递,它被编码为Pb?ZsÈU??}??
但是从数据库编码我得到的Pb?ZsÈU??}??
但显然它们不匹配.那我该如何比较呢?任何的想法??
不要这样做:
Encoding.UTF8.GetString(md5.ComputeHash(pass))
Run Code Online (Sandbox Code Playgroud)
计算散列的结果不是 UTF-8编码的文本.这是二进制数据.当您尝试将其解释为UTF-8编码的字符串时,您将丢失数据 - 因此问题就出现了.
因此,要么将其存储为二进制数据,要么将其转换为十六进制或base64,这两者都可用于表示任意二进制数据而不会丢失.
(作为一个重要的一边,你应该不只是使用MD5哈希密码-尤其是没有盐但是,这是一个单独的讨论,一个你应该绝对重视,以及一个在那里我没有资格发言权威性.)
归档时间: |
|
查看次数: |
710 次 |
最近记录: |