Java算法之一:算算術校驗和
public static byte[] calculateChecksum(byte[] data) { long sum = 0; for (int i = 0; i< data.length; i++) { sum += (data[i] & 0xff); } while ((sum >>16) >0) { sum = (sum & 0xffff) + (sum >>16); } sum = ~sum; return new byte[] {(byte) (sum >>8), (byte) (sum & 0xff)}; }
算術校驗和是計算一段數據的簡單方法,用于檢測數據是否被篡改。Java提供了一種簡單的算法來計算算術校驗和。
首先,將每個字節的值相加。然后,將結果與0xffff進行與運算,以將位寬限制在16位內。如果結果大于0xffff,則繼續執行循環加操作,直到位寬限制在16位內。最后,取結果的反碼作為校驗和。因為在算術校驗和中,如果數據被篡改,校驗和也會被修改,所以我們需要對校驗和進行取反以檢測數據是否被篡改。
在代碼中,我們傳入一個字節數組作為輸入數據,并返回一個字節數組作為校驗和。我們首先將所有的字節相加,然后繼續執行循環加操作,直到結果位寬被限制在16位內。最后,我們將結果取反然后拆分成兩個字節,最高字節在前,最低字節在后,作為校驗和返回。