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;
    }
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值