2012-04-23 194 views
1

我想通過簡單地將它們連接在一起在網絡上發送幾個數據塊,我希望能夠使用校驗和來驗證一切都已經完成(這主要是作爲防禦檢查反對錯誤,不是因爲我看到或期望實際的低級別數據損壞)。所以我正在尋找一個校驗和算法,它可以讓我從部件的校驗和中計算整個校驗和。什麼校驗和技術會讓我從它的部件的校驗和中計算整個校驗和?

像我認爲會工作的技術的一個簡單的例子就是將每個塊的每個字節視爲一個整數,並將所有這些整數相加(當然,這不會檢測到缺少的零字節)。另一種方法是計算每個塊的長度(當然,這不會檢測到不會導致淨插入或刪除的數據更改)。另一種方法是將所有字節異或,但是這隻能生成1個字節的校驗和(我可以一次取4個字節,並對每個單元進行異或運算,但如果塊長度不相等,四倍的倍數,我不得不陷入混亂,我認爲這可能會消除簡單連接不同塊的能力)。

所以,我正在尋找更嚴重的校驗和或哈希算法,它仍然可以讓我輕鬆地計算給定每個塊的校驗和的幾個連接塊的校驗和。有沒有存在?

+2

[Incremental Checksums]的可能重複(http://stackoverflow.com/questions/1173481/incremental-checksums) – gsteff 2012-04-23 00:37:02

回答

0

通過TCP正確傳輸消息需要一個協議。該協議必須定義消息的開始,結束或優選兩個。這意味着你將永遠知道消息的長度。如果你的協議在開始處設置了長度,在消息結尾處設置了整數校驗和,則會檢測到缺少零字節,因爲傳輸的校驗和將從流中錯誤的字節中恢復,因此平均而言將是錯誤的65535超過65536.