[英]MD5 Hash in C# doesn't match MD5 Hash in Action Script
我在動作腳本中對某些數據進行哈希處理,然后將哈希與在C#中計算出的哈希進行比較,但它們不匹配。
有人知道為什么嗎?
這是我在動作腳本中執行的操作:
var hash : String = MD5.hash(theString);
這是我在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();
我以為這是編碼的東西,但是不能動彈……讓我知道!
-ev
ActionScript必須使用不同的字符串編碼,但是我不清楚哪一個(我嘗試用google搜索,但是很難找到)。
因此,我建議您嘗試以下操作:
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("ä"))));
(當然, ToHex
是您已經編寫的用於將事物轉換為十六進制的函數:)
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();
}
然后檢查獲得的三個哈希值中的哪個與ActionScript中的哈希值相同。 然后,您將知道ActionScript使用哪種編碼。
ActionScript中的字符串采用UTF-16編碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.