为什么我从c#到js获得不同的MD5哈希?

时间:2018-10-09 11:00:22

标签: javascript c# vue.js md5

我有一个用于加密密码的c#函数:

System.Security.Cryptography.MD5CryptoServiceProvider _md5Provider = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] bs = System.Text.Encoding.UTF8.GetBytes(_password);
            bs = _md5Provider.ComputeHash(bs);
            System.Text.StringBuilder s = new System.Text.StringBuilder();
            foreach (byte b in bs)
            {
                s.Append(b.ToString("x2").ToLower());
            }

            string _md5password = s.ToString();

我尝试使用crypto-js / md5在js中加密相同的密码:

loginUser() {
                console.log(md5(this.password).toString());
            }

我得到了不同的哈希值。

1 个答案:

答案 0 :(得分:0)

看起来JavaScript文件是以UTF-8以外的其他格式保存的。

MD5这样的哈希函数从字节数组而不是字符串中计算哈希值。因此,您首先使用某种编码(例如Unicode,UTF-8或ANSI)从密码中计算一个字节数组;使用不同的编码,您将获得不同的值。

要产生相同的MD5哈希,请使用UTF-8保存JavaScript文件(因为C#代码使用的是UTF-8)。这样,在C#和JavaScript程序中,MD5函数都会在具有相同值的字节数组上进行计算,因此散列将是相同的。