所以,我尝试检查密码是否匹配.
这是我使用的加密,一旦数据插入数据库,一次检查登录字段中插入的密码是否与数据库中的密码匹配:
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)
我想这是一个编码问题,但似乎无法弄清楚自己.
这条线不合适:
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来哈希密码,但这是一个不同的对话.)