2013-05-09 26 views
0

我正在處理來自一個串行硬件的6字節消息。 在他們的手冊中,製造商已經規定每個消息(第6個字節)的校驗和是由'消息其餘部分的總和的低字節'組成的。我的5字節數據校驗和不是

Here is one of their examples, dissected

Here are some others

我還沒有嘗試過所有這些例子還沒有,讓我帶的第一個「解剖」例如我的工作:

這是公式提供:

Low byte of 0xB2 + 0x00 + 0x69 + 0x1A + 0x83 = 0x68

所以,總和是0x1B8,如果我把第一個8-b它,我得到0xB8 嗯...我做錯了嗎?

我想了一下,猜測,哦,也許他們只是做一個按位操作,而這在老的硬件上很常見? 所以我寫了每一部分的比特和異或系列一起...

  • 0xB2^0×00 = 0xB2(杜)
  • 0xB2^0×69 =位於0xDB
  • 位於0xDB^0x1A的= 0xC1
  • 0xC1^0×83 = 的0x42

我的手這樣做,並通過計算器。同樣的結果。

我能夠在我的程序中重現我的計算,我的校驗和與硬件輸出的不同。手冊型號與我所擁有的硬件相匹配...

查看求和的每個部分的二進制數,我不確定我能看到每個他們記錄的輸出的清晰模式。在一些校驗和中,如IPv4頭,進位被移位或加回到校驗和中,這可能是這種情況嗎?

我的問題是:

上午我在做這個校驗和是如何被計算的數學錯誤?

任何幫助將不勝感激!謝謝。

回答

1

我剛剛用Windows RT計算器攻擊了所有的樣本,其他所有(here)都很好 - 它只是the first example (which you dissected),這是錯誤的。這看起來像一個簡單的文檔錯字。

+0

是的,有一位同事也想出了這個。不幸的是,硬件也出現了錯誤,但一直保持不變。我只是假設規範中的某些內容發生了更改,並且文檔已過時。 – WolverineOfLove 2013-05-09 23:12:23