2

我将我的数据类型存储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;
        } 

现在我想compare在插入新密码时使用它。

为此,我从数据库中获取特定用户的记录,并以字符串形式获取他现有的编码密码。如果我使用相同的密码,那么它也不匹配。例如,如果我adgjl135作为密码传递,它被编码为Pb�ZsÈU��}��但从数据库中我得到的是Pb?ZsÈU??}??但很明显它们不会匹配。那我该如何比较它们呢?任何的想法??

4

2 回答 2

8

不要这样做:

Encoding.UTF8.GetString(md5.ComputeHash(pass))

计算哈希的结果不是UTF-8 编码的文本。是二进制数据。当您尝试将其解释为 UTF-8 编码的字符串时,您会丢失数据 - 因此会出现问题。

因此,要么将其存储为二进制数据,要么将其转换为 hex 或 base64,这两者都可以用来表示任意二进制数据而不会丢失。

(作为重要的一点,你不应该使用 MD5 来散列密码 - 尤其是不加盐。但这是一个单独的讨论,你绝对应该关注一个,而我没有能力发表权威性的发言。)

于 2013-02-13T10:36:48.363 回答
0
于 2013-02-13T14:22:21.857 回答