md5加密的字符串返回与插入数据库不同的数据库

Vel*_*tar 1 c# asp.net

所以,我尝试检查密码是否匹配.

这是我使用的加密,一旦数据插入数据库,一次检查登录字段中插入的密码是否与数据库中的密码匹配:

 byte[] pass = Encoding.UTF8.GetBytes(password);
 MD5 md5 = new MD5CryptoServiceProvider();
 string newPass = Encoding.UTF8.GetString(md5.ComputeHash(pass));
Run Code Online (Sandbox Code Playgroud)

但每次我尝试登录(具有正确的详细信息),它都不起作用.在调试器中,这是来自数据库的字符串:

?]??$PL??f??6?
Run Code Online (Sandbox Code Playgroud)

并且从登录字段加密的那个:

?]??$PL??f??6?
Run Code Online (Sandbox Code Playgroud)

我想这是一个编码问题,但似乎无法弄清楚自己.

Jon*_*eet 6

这条线不合适:

string newPass = Encoding.UTF8.GetString(md5.ComputeHash(pass));
Run Code Online (Sandbox Code Playgroud)

ComputeHash返回任意二进制数据.您应该将其保留为二进制数据,或者如果您确实需要将其转换为文本,请使用Base64将其转换为允许您稍后恢复原始数据的方式:

string base64Hash = Convert.ToBase64String(md5.ComputeHash(pass));
Run Code Online (Sandbox Code Playgroud)

您可以将其存储为普通字符串 - 它只是ASCII.

(我不会亲自使用MD5来哈希密码,但这是一个不同的对话.)