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

Javascript 为什么我从c#到js得到不同的MD5哈希?,javascript,c#,vue.js,md5,Javascript,C#,Vue.js,Md5,我有一个c#函数,用于加密密码: System.Security.Cryptography.MD5CryptoServiceProvider\u md5Provider=new System.Security.Cryptography.MD5CryptoServiceProvider(); byte[]bs=System.Text.Encoding.UTF8.GetBytes(\u密码); bs=md5Provider.ComputeHash(bs); System.Text.StringBu

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

System.Security.Cryptography.MD5CryptoServiceProvider\u md5Provider=new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[]bs=System.Text.Encoding.UTF8.GetBytes(\u密码);
bs=md5Provider.ComputeHash(bs);
System.Text.StringBuilder s=新的System.Text.StringBuilder();
foreach(bs中的字节b)
{
s、 附加(b.ToString(“x2”).ToLower());
}

字符串_md5password=s.ToString()看起来JavaScript文件是以UTF-8以外的编码保存的

MD5
这样的散列函数从字节数组而不是字符串计算散列。因此,首先使用Unicode、UTF-8或ANSI等特定编码,从密码计算字节数组;使用不同的编码可以得到不同的值


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

顺便说一句,MD5是散列,而不是加密。您不能从散列值中解密原始密码,而是计算用户输入的密码的散列,并将其与存储在db中的另一个散列值进行比较,如果它们匹配,则您知道用户输入了正确的密码。