开发者

MD5 Hash in C# doesn't match MD5 Hash in Action Script

I'm hashing some data in Action Script then comparing the hash to one computed in C#, but they don't match.

Anyone know why?

Here's what I do in Action script:

    var hash : String = MD5.hash(theString);

And here's what I do in C#:

    var md5Hasher = MD5.Create();
    byte[] data = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(theSameString));
    var sBuilder = new StringBuilder();

    for (int i = 0; i < data.Length; i++)
    {
 开发者_开发技巧       sBuilder.Append(data[i].ToString("x2"));
    }
    var hash = sBuidler.ToString();

I'm thinking it's an encoding thing, but can't put my finger on it... let me know!

-Ev


ActionScript must be using a different string encoding, but it is unclear to me which (I tried to google but it’s very hard to find).

Therefore, I recommend you try the following:

Console.WriteLine(ToHex(MD5.Create().ComputeHash(Encoding.UTF8.GetBytes("ä"))));
Console.WriteLine(ToHex(MD5.Create().ComputeHash(Encoding.Unicode.GetBytes("ä"))));
Console.WriteLine(ToHex(MD5.Create().ComputeHash(Encoding.GetEncoding("ISO-8859-1").GetBytes("ä"))));

(Of course, ToHex is the function that you already wrote to turn things into into hexadecimal:)

static string ToHex(byte[] data)
{
    var sBuilder = new StringBuilder();
    for (int i = 0; i < data.Length; i++)
        sBuilder.Append(data[i].ToString("x2"));
    return sBuilder.ToString();
}

And then check to see which of the three hashes you get is the same as the one in ActionScript. Then you’ll know which encoding ActionScript uses.


Strings in ActionScript are in UTF-16 encoding.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜