2

我无法将 C# 哈希算法与节点匹配,问题似乎是 Unicode 编码。有没有办法将字符串转换为 Unicode,然后对其进行哈希处理并将其输出为十六进制?不幸的是,我无法更改 c# 代码,它超出了我的控制范围。

节点算法

function createMd5(message) {
    var crypto = require("crypto");
    var md5 = crypto.createHash("md5");        
    return md5.update(message).digest('hex');
}

c# 哈希算法

 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();

        }
    }
4

1 回答 1

5

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

function createMd5(message) {
    var crypto = require("crypto");
    var md5 = crypto.createHash("md5");        
    return md5.update(new Buffer(message, 'ucs-2')).digest('hex');
}
于 2013-06-28T02:16:22.800 回答