Java byte数组异或校验

异或校验和MD5加密有些类似,个人理解的核心原理如下:

假如你需要传输一组数据1,2,3,为了确保数据正确性,你额外加了一个数 6;

最终传输的数据是1,2,3,6 ,这个6是怎么得出的呢? 是前面三个数相加得出;

当接收方收到数据后,尝试判断前三个数加起来是否等于第四个数,等于则证明数据是正确无误的.

下面的异或校验有些类似于深海举的这个例子,只不过区别是:

例子中校验位是用加法得出, 异或校验中的校验位是用异或得出;

发送方加校验位:

将 thisData 前三个数据 异或后得出校验位,并放在这三个数据后

byte[] thisData = new byte[4];        
thisData[0] = (byte) 0x00;
thisData[1] = (byte) 0x01;
thisData[2] = (byte) 0x02;
thisData[3] = (byte) (thisData[0] ^ thisData[1] ^ thisData[2]);//校验位

接收方验证校验位:

第一个参数传入校验位曾经校验过的数据;

第二个参数传入校验位

当异或结果等于0 表示校验成功

    //开始校验
    if (!isVerifyYes(new byte[]{data[0], data[1], data[2]}, data[3])){
            // 校验不通过
    }
    /**
     *Author:XingHai.Zhao
     *Purpose: 分包数据校验位是否通过验证
     * @return
     */
    private boolean isVerifyYes(byte[] bytes, byte verify){
        for(int i=0; i<bytes.length;i++){
            verify = (byte) (verify^bytes[i]);
        }
        return verify==0;
    }

猜你喜欢

转载自blog.csdn.net/qq_39731011/article/details/120459642
今日推荐