固件通信CRC校验

 一、设备端加密

uint8 get_crc8(uint8 *ptr,uint32 len)
{
	uint8 crc;
 	uint8 i;
	
    crc = 0;
	
    while(len--)
    {
       crc ^= *ptr++;
       for(i = 0;i < 8;i++)
       {
           if(crc & 0x01)
           {
               crc = (crc >> 1) ^ 0x8F;
           }else crc >>= 1;
       }
    }
    return crc;
}

二、Java后台加密

public static int getCRC(byte[] data){
        int  CRC=0;
        for(int i=0;i<data.length; i++){
            int li = data[i];
            if(li<0)
                li &= 0XFF;
            CRC ^= li;
            for(int j=0;j<8;j++){
                if((CRC & 0x01) != 0){
                    CRC = (CRC >> 1) ^ 0X8f;
                }else{
                    CRC >>= 1;
                }
            }
        }
        CRC &= 0xff;
        return CRC;
    }

说明:后台获取设备提交过来得内容后,生成CRC码进行校验。(java中byte有符号最大127,超过后强转为负数,与上ff即可) 

java字符串转byte见下篇 

猜你喜欢

转载自blog.csdn.net/pin_shuang/article/details/81102817