将C#MD5哈希算法与node.js匹配

将C#MD5哈希算法与node.js匹配,c#,node.js,md5,C#,Node.js,Md5,我在将C#散列算法与节点匹配时遇到问题,问题似乎在于Unicode编码。有没有一种方法可以将字符串转换为Unicode,然后将其散列并输出为十六进制?不幸的是,我无法更改c代码,它超出了我的控制范围 节点算法 function createMd5(message) { var crypto = require("crypto"); var md5 = crypto.createHash("md5"); return md5.update(message).

我在将C#散列算法与节点匹配时遇到问题,问题似乎在于Unicode编码。有没有一种方法可以将字符串转换为Unicode,然后将其散列并输出为十六进制?不幸的是,我无法更改c代码,它超出了我的控制范围

节点算法

function createMd5(message) {
    var crypto = require("crypto");
    var md5 = crypto.createHash("md5");        
    return md5.update(message).digest('hex');
}
 private static string GetMD5(string text)
    {
        UnicodeEncoding UE = new UnicodeEncoding();
        byte[] hashValue;
        byte[] message = UE.GetBytes(text);
        using (MD5 hasher = new MD5CryptoServiceProvider())
        {
            string hex = "";
            hashValue = hasher.ComputeHash(message);
            foreach (byte x in hashValue)
            {
                hex += String.Format("{0:x2}", x);
            }

            return hex.ToLower();

        }
    }
c#散列算法

function createMd5(message) {
    var crypto = require("crypto");
    var md5 = crypto.createHash("md5");        
    return md5.update(message).digest('hex');
}
 private static string GetMD5(string text)
    {
        UnicodeEncoding UE = new UnicodeEncoding();
        byte[] hashValue;
        byte[] message = UE.GetBytes(text);
        using (MD5 hasher = new MD5CryptoServiceProvider())
        {
            string hex = "";
            hashValue = hasher.ComputeHash(message);
            foreach (byte x in hashValue)
            {
                hex += String.Format("{0:x2}", x);
            }

            return hex.ToLower();

        }
    }

您对这是一个编码问题的怀疑是正确的。您可以通过以下更改来修复节点代码,这将把消息字符串转换为utf-16(这是.NET的默认编码):