UAVCANv0.9解包(不使用库,直接基于CAN接口完成)

CRC计算

UAVCAN的CRC计算是针对多帧拼包后的数据段进行的,其中不包括每帧的尾,也就是最多7个Byte,如下图中部分:

但是在计算之前,为了保证帧内内容与发送者协议一致(I guess),需要在数据段前增加数据协议类型特征码(data type signiture,是dsdl编译生成的,简单理解为与协议结构体绑定),如下图,在数据前面添加。

举个例子--解1063.Fix2包

如协议中,Fix2包有62个字节,即解算时,应该在这62个字节前面加上8个字节(data type signiture)再进行CRC计算:

uint16_t crc = crc_ccitt(signiture , sizeof(signiture ), 0xffff);//crc种子是0xffff,如协议描述

crc = crc_ccitt(payload , sizeof(Fix2 ), crc);

计算所得crc即与数据包中符合

关键在于signature的获取

signiture的计算对于Fix2这种包里面还含有其它协议的数据包,是一个递归计算的过程,在Fix2中可以简单的将计算结果取出来(使用libuavcan的现有程序完成)。然后在自己写的代码里面,使用这个signiture完成CRC校验。

 In addition  递归计算的过程(未深入,大概是这样)

 该包中Timestamp 是一个协议包,其自身带有自己的signiture

 所以Fix2包的真实signiture是将他们一起计算所得,而基础类型 integer float  array这些,他们的getDataTypeSignature是一个空函数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你希望通过打包Qt应用程序的.exe文件来防止别人解包,可以考虑以下几种方法来增加程序的安全性: 1. 使用加密算法:在将Qt应用程序打包为.exe文件之前,可以对一些敏感的资源文件进行加密。这样,即使别人解包了程序,也无法轻易获取到原始的资源文件。 2. 程序逻辑保护:在编写代码时,可以采取一些防护措施来防止别人反向工程你的程序。例如,使用代码混淆技术,使代码难以理解和反编译;或者在关键部分使用自定义的加密算法,增加破解的难度。 3. 软件保护工具:使用一些专业的软件保护工具来加固你的应用程序。这些工具可以提供各种安全功能,如代码混淆、反调试、反内存修改等,从而增加程序的安全性。 4. 硬件绑定:将你的应用程序与特定的硬件设备进行绑定,以确保只能在特定硬件上运行。这样,即使别人解包了程序,也无法在其他设备上正常运行。 5. 使用数字签名:通过使用数字签名来验证应用程序的完整性和来源。数字签名可以防止别人篡改你的应用程序,并提供了认证的机制,让用户可以信任你的程序。 需要注意的是,完全阻止别人解包和破解你的应用程序是非常困难的。上述方法只能增加程序的安全性,但不能保证百分之百的安全。因此,在设计和开发应用程序时,还需要考虑其他安全措施,并平衡安全性与用户体验之间的关系。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值