问题
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