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

自闭症网瘾萝莉.ら 提交于 2019-12-11 03:37:24

问题


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


回答1:


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.




回答2:


Strings in ActionScript are in UTF-16 encoding.



来源:https://stackoverflow.com/questions/3581242/md5-hash-in-c-sharp-doesnt-match-md5-hash-in-action-script

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!