簡體   English   中英

字節數組長度1000的校驗和有多少字節

[英]How many bytes of checksum for byte array length 1000

我正在實施可靠的數據傳輸協議。 數據包的最大長度為1000字節。 我需要多少個字節來存儲最大數據包大小的校驗和? 我嘗試使用一個字節存儲校驗和,但是接收器無法獲得與存儲的校驗和相同的校驗和。

Checksum checksum = new CRC32();
checksum.update(out_data, 0, out_data.length-1);

Long checksumValue = checksum.getValue();
out_data[out_data.length-1] =  checksumValue.byteValue();

這是我實現校驗和的代碼。 我將字節數組的最后一個插槽用於校驗和。 請注意,這不是數據包損壞的情況,因為可以使我正在運行的不可靠網絡的仿真更加可靠。

您可以檢查任何大小的事物。 以太網幀通常為1500+字節,並且僅使用4個字節作為校驗和。 如果您想安全起見,請使用sha1(但是它占用20個字節,並且計算起來可能很慢)。

要將CRC32的結果放入數組中,您需要4個字節(32位/每字節8位)。

字節數組長度1000的校驗和有多少字節

這是一個非常棘手的問題。

首先,無論校驗和有多大,以及校驗和如何計算,都永遠無法消除無法檢測到的損壞的可能性。 (即使校驗和值與消息值一樣多,也無法消除傳輸會破壞消息和校驗和的可能性……)

如果我們對所有可能損壞的集合進行平均,那么我們可以期望的最好結果是,N位校驗和將無法在2 N中一次檢測到損壞。 如果該概率過高,則需要增加N。

要通過簡單的分析,您必須考慮特定的校驗和算法及其檢測常見錯誤類型的能力。 例如單位翻轉,位換位等。 我對此並不“了解數學”,但是我想對於實際的校驗和算法來說,它真的變得很復雜,而且一種經驗方法會給出最佳答案。 但是我也可以想象,推薦的算法在理論上接近“ 2 N一次 ”,並且對於常見錯誤綜合症沒有任何特別的弱點。

因此,最好的建議可能是找出適合您的概率,然后使用該概率來選擇N ...以及可以為您提供該大小(或更大)的校驗和的算法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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