由网友(姐不是限量版姐是绝版)分享简介:我有一个用于加密密码的C#函数:数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">System.Security.Cryptography.MD5CryptoServiceProvider _md5Provider = new System.Security.Cryptography....![MD5真的已靠不住 同样校验,不同文件](https://p.xsw88.cn/allimgs/daicuo/20230903/2454.png)
我有一个用于加密密码的C#函数:
数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">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中的相同密码:
数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">loginUser() {
console.log(md5(this.password).toString());
}
![MD5真的已靠不住 同样校验,不同文件](https://p.xsw88.cn/allimgs/daicuo/20230903/2454.png)
我得到不同的哈希。
推荐答案
看起来该文件是以非UTF-8编码保存的。
像MD5
这样的散列函数从字节数组计算散列,而不是从字符串。因此,您首先使用特定的编码(如Unicode、UTF-8或ANSI)从密码计算一个字节数组;使用不同的编码可以得到不同的值。
要生成相同的MD5散列,请使用UTF-8保存JavaScript文件(因为C#代码使用的是UTF-8)。这样,在C#和JavaScript程序中,MD5函数都对具有相同值的字节数组进行计算,因此散列将是相同的。
相关推荐
最新文章