zoukankan      html  css  js  c++  java
  • 单片机通信的加密和解密

    通信,有时候为了保证截获方即使得到了数据包,也不知道内容,所以加密传输即可;但有时候不需要知道数据包的内容,只要知道知道数据包能干嘛即可,比如发指令,此种情况单单对数据包进行加密就不够了。

    基础知识:

    1、单片机适用的数据加密算法有TEA,经过TEA加密的数据字节数和加密前的一样,只是数据不一样了

     2、CRC:一个数据包,根据CRC算法的不同,可以得到不同长度的CRC值;CRC一方面保证数据不会被篡改,另一方面能检测传输过程是否出现错误

    假定A为发送方,B为接收方

    加密模型1:

    A:发送:请求临时许可号+临时唯一编号(编号的目的:使第一次发送的请求临时许可号和第二次发送的数据为一组,只有接收到B返回的临时许可号,才进行第二次发送,编号可以使A知道所发送的请求临时许可号得到返回,而不是其他指令的许可号)

    B:返回许可号(此许可号在A的有效期是30S)+临时唯一编号

    A:发送:许可号(TEA加密过)+数据(TEA加密过)

    B:根据和A进行协商的TEA加密算法进行解密,如果加密过的许可号有效则此数据包有效,否则无效;执行结果TEA加密返回

    优点:在通信过程中,即使数据被截获,并且知道此数据的用途,当再次发送同样数据B,也是无效的,此时许可号已过期。截获方虽然也可以申请许可号,由于许可号位数很多,几乎不可能再申请到相同的许可号,截获的数据不能再次使用

    缺点:A每执行一个数据包,需要发送两次数据包

    注:数据包发送过程中可以没有CRC值,因为即使截获方修改了数据,但是得不到有效的许可号;虽然CRC值还检测数据传输过程中是否出现错误,暂时不考虑。

    加密模型2:

    A:发送:CRC值+数据(TEA加密过)

    B:根据数据算出CRC值,和A发送来的CRC值是否一致,一致则表示数据包有效,否则无效;执行结果TEA加密返回

    缺点:如果数据包被截获,即使截获方不知道CRC规则,只要原样把数据发送给B,B也认为数据包有效

    优点:代码复杂度低,每执行一个数据包,只需要发送一次数据包;数据包修改后无效因为CRC值不对

  • 相关阅读:
    cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?)
    “校长风暴”来袭,《诺亚幻想》不删档数据惊艳
    地形植被编辑器
    游戏记录
    2016乐高迷们不能错过的十大乐高模型
    UI相关教程:HUD、UMG和Widget
    [UE4]C++中SpawnActor用法(动态创建Actor)
    [UE4][Canvas]用C++代码绘制血条(HealthBar)
    [UE4]C++代码实现播放粒子特效
    [UE4]C++实现动态加载的问题:LoadClass<T>()和LoadObject<T>() 及 静态加载问题:ConstructorHelpers::FClassFinder()和FObjectFinder()
  • 原文地址:https://www.cnblogs.com/god-of-death/p/6863601.html
Copyright © 2011-2022 走看看