簡體   English   中英

C#中的MD5哈希與動作腳本中的MD5哈希不匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM