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

标签 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());
            }

我得到不同的哈希值。

最佳答案

看起来 JavaScript 文件是以 UTF-8 以外的编码保存的。

MD5 等散列函数从字节数组而非字符串计算散列。因此,您首先使用某种编码(如 Unicode、UTF-8 或 ANSI)从密码中计算出一个字节数组;使用不同的编码你会得到不同的值。

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

关于javascript - 为什么我从 c# 到 js 得到不同的 MD5 哈希值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52719446/

相关文章:

c# - 使用 Autofac 的 IIndex 解析多个 Keyed 实例

javascript - 复选框单击 v-for 循环内的无效数据

javascript - Vue.js 通过 Prop 传递回调。

vue.js - 将数据从输入传递到 vue 的函数

javascript:我的声音只播放一次?

javascript - 如何在不弄乱 IE9 的情况下获取标记为 "visited"的 Ajax 链接

javascript - 如何将 HTML 表格转换为图表?

c# - 具有多个控件的 winform 中的事件处理

c# - DeleteAsync和PostAsync不起作用

javascript - Observable.of 对图像 src 中的管道不返回任何内容