C# md5 哈希不匹配节点生成的 md5 哈希

C# md5 hash not matching node generated md5 hash

我正在尝试生成一个 md5 哈希并将其通过 C# 程序存储为十六进制字符串(与密码无关!),但我需要复制现有的节点方法。当我检查我生成的哈希与节点生成的哈希时,它们不匹配。我怀疑它与编码有关,但我已经尝试过 UTF8 和 ASCII,但运气不佳。任何帮助表示赞赏。

节点方法如下:

 public static hash(...data: string[]): string {

        var md5sum = createHash('md5');
        md5sum.update(data?.join() ?? '');

        var hash = md5sum.digest('hex');
        return hash;

    }

C# 方法

 public static string CalculateHash(string[] inputs)
        {
            var hashInput = String.Join("", inputs);

            using (var md5 = System.Security.Cryptography.MD5.Create())
            {
                byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(hashInput);
                byte[] hashBytes = md5.ComputeHash(inputBytes);
                var sb = new StringBuilder();
                for (int i = 0; i < hashBytes.Length; i++)
                {
                    sb.Append(hashBytes[i].ToString("x2"));
                }
                return sb.ToString();
            }
        }

JavaScript data?.join() joins strings with a comma,即 ["Hello", "World"].join() 产生 "Hello,World".

在 C# 中,您显式连接不带分隔符的字符串,因此 String.Join("", new[] {"Hello", "World"}) 产生 "HelloWorld"

如果您将 C# 代码行更改为

var hashInput = String.Join(",", inputs);

两种方法产生相同的结果 (C# fiddle, JavaScript fiddle)。