今天记录下关于TEA方式的加密协议我理解为:发送数组赋值,发送数组加密,接收加密数组,然后再解密为实际数据;

1、#include "tea_check.c"文件代码:

/******************************************************************************************
*** File Name       : tea_check
*** Description :
*** writer                                          timer                                       version
*** WL                                                  2020/6/18                               V0.1
******************************************************************************************/ /******************************************************************************************
***                                     include file                                                                                                            ***
******************************************************************************************/
#include "tea_check.h"/******************************************************************************************
***                                     Macro definition                                                                                                    ***
******************************************************************************************/ /******************************************************************************************
***                                     struct and enum variable                                                                                    ***
******************************************************************************************/ /******************************************************************************************
***                                     global variable                                                                                                     ***
******************************************************************************************/
TEA_DAT ted_data;/******************************************************************************************
***                                     function source code                                                                                            ***
******************************************************************************************/ /******************************************************************************************
*** Name                        : None
*** Parameters(in)  : None
*** Return value        : None
*** Description:
*** writer                                          timer                                       version
*** XXX                                                 XXX/XX/XX                               XXX
******************************************************************************************//******************************************************************************************
*** 函数名称: 无
*** 输入参数: 无
*** 返 回 值: 无
*** 说    明:无
*** 编者                                      时间                                      版本
*** XXX                                         XXX/XX/XX                               XXX
******************************************************************************************/
//************************\    /\    /********** |    ***********************************//
//*************************\  /  \  /*********** |    ***********************************//
//**************************\/    \/************ |_ _ ***********************************///*******************TEA加密解密算法
*******************/
void EncryptTEA(unsigned int *firstChunk, unsigned int *secondChunk, unsigned int* key)
{unsigned int y = *firstChunk;unsigned int z = *secondChunk;unsigned int sum = 0;unsigned int delta = 0x9e3779b9;for (int i = 0; i < 8; i++)//8轮运算(需要对应下面的解密核心函数的轮数一样){sum += delta;y += ((z << 4) + key[0]) ^ (z + sum) ^ ((z >> 5) + key[1]);z += ((y << 4) + key[2]) ^ (y + sum) ^ ((y >> 5) + key[3]);}*firstChunk = y;*secondChunk = z;
}void DecryptTEA(unsigned int *firstChunk, unsigned int *secondChunk, unsigned int* key)
{unsigned int  sum = 0;unsigned int  y = *firstChunk;unsigned int  z = *secondChunk;unsigned int  delta = 0x9e3779b9;sum = delta << 3; //32轮运算,所以是2的5次方;16轮运算,所以是2的4次方;8轮运算,所以是2的3次方for (int i = 0; i < 8; i++) //8轮运算{z -= (y << 4) + key[2] ^ y + sum ^ (y >> 5) + key[3];y -= (z << 4) + key[0] ^ z + sum ^ (z >> 5) + key[1];sum -= delta;}*firstChunk = y;*secondChunk = z;
}//buffer:输入的待加密数据buffer,在函数中直接对元数据buffer进行加密;size:buffer长度;key是密钥;
void EncryptBuffer(char* buffer, int size, unsigned int* key)
{char *p = buffer;int leftSize = size;while (p < buffer + size &&leftSize >= sizeof(unsigned int) * 2){EncryptTEA((unsigned int *)p, (unsigned int *)(p + sizeof(unsigned int)), key);p += sizeof(unsigned int) * 2;leftSize -= sizeof(unsigned int) * 2;}
}//buffer:输入的待解密数据buffer,在函数中直接对元数据buffer进行解密;size:buffer长度;key是密钥;
void DecryptBuffer(char* buffer, int size, unsigned int* key)
{char *p = buffer;int leftSize = size;while (p < buffer + size &&leftSize >= sizeof(unsigned int) * 2){DecryptTEA((unsigned int *)p, (unsigned int *)(p + sizeof(unsigned int)), key);p += sizeof(unsigned int) * 2;leftSize -= sizeof(unsigned int) * 2;}
}//设置密钥,必须需要16个字符或以上
unsigned int *key = (unsigned int *)"testkey123456789";char TEA_TxBuff[32];
char TEA_RxBuff[32];/******************************************************************************************
*** 函数名称: adc_GetConvertedGroup
*** 输入参数: 无
*** 返 回 值: 无
*** 说    明:TEA加密函数
*** 调度周期:无
*** 编者                                      时间                                      版本
*** WL                                          2020/6/18                               V0.1
******************************************************************************************/
void tea_testFunction(void)
{uint8_t count;ted_data.key = (unsigned int *)"testkey123456789";        //需要用户自己输入 ,设置密钥,必须需要16个字符或以上for(count =0; count <sizeof(ted_data.TEA_TxBuff); count ++){ted_data.TEA_TxBuff[count] = 0x30 + count;}Debug_Printf(UART_DEBUG,"\r\n原始数据\t:%s \r\n" ,(char *)ted_data.TEA_TxBuff);         //打印原始数据HAL_Delay(100); EncryptBuffer(ted_data.TEA_TxBuff, sizeof(ted_data.TEA_TxBuff), ted_data.key);      //加密数据Debug_Printf(UART_DEBUG,"发送加密数据\t:%s \r\n" ,(char *)ted_data.TEA_TxBuff);                    //打印加密数据                HAL_Delay(100); memcpy(ted_data.TEA_RxBuff, ted_data.TEA_TxBuff, sizeof(ted_data.TEA_TxBuff));                                                                          //模拟接收到加密后的数据,放入接收数组Debug_Printf(UART_DEBUG,"接收加密数据\t:%s \r\n" ,(char *)ted_data.TEA_RxBuff);                       //打印接收加密数据HAL_Delay(100);   DecryptBuffer(ted_data.TEA_RxBuff, sizeof(ted_data.TEA_RxBuff), ted_data.key);Debug_Printf(UART_DEBUG,"解密数据\t:%s \r\n" ,(char *)ted_data.TEA_RxBuff);          HAL_Delay(100); }

2、#include "tea_check.h"代码:

/******************************************************************************************
*** File Name       : tea_check
*** Description :
*** writer                                          timer                                       version
*** WL                                                  2020/6/18                               V0.1
******************************************************************************************/ #ifndef __TEA_CHECK_H
#define __TEA_CHECK_H/******************************************************************************************
***                                     include file                                                                                                            ***
******************************************************************************************/
#include "main.h"#include "usart.h"                     //system file include #include <stdio.h>                      //uart redirect fputc
#include <string.h>                       //copy function
#include <stdarg.h>                       //va_start /vsnprintf /va_end function/******************************************************************************************
***                                     Macro definition                                                                                                    ***
******************************************************************************************/
#define TEA_SIZE    32      //通讯数组长度typedef struct
{unsigned int *key;                     //设置密钥,必须需要16个字符或以上char TEA_TxBuff[TEA_SIZE];char TEA_RxBuff[TEA_SIZE];}TEA_DAT;/******************************************************************************************
***                                     struct and enum variable                                                                                    ***
******************************************************************************************/ /******************************************************************************************
***                                     global variable                                                                                                     ***
******************************************************************************************/
extern TEA_DAT ted_data;/******************************************************************************************
***                                     global function                                                                                                     ***
******************************************************************************************/ extern void EncryptTEA(unsigned int *firstChunk, unsigned int *secondChunk, unsigned int* key);
extern void DecryptTEA(unsigned int *firstChunk, unsigned int *secondChunk, unsigned int* key);
extern void EncryptBuffer(char* buffer, int size, unsigned int* key);
extern void DecryptBuffer(char* buffer, int size, unsigned int* key);
extern void tea_testFunction(void);#endif 

3、展示效果:

单片机通讯数据加密 TEA 方式相关推荐

  1. 基于51单片机的OLED驱动方式(iic通讯方式)

    基于51单片机的OLED驱动方式(iic通讯方式) 前言: 本人从事硬件开发,自学软件,因为发现在学习过程中,有很多问题对于没有项目实战经验的新手来讲太难解决了,可以说基本上是无从下手.现将自己学习过 ...

  2. 单片机上使用TEA加密通信(转)

    源:单片机上使用TEA加密通信 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:MDK4.72 单片机:STM32 说 ...

  3. 使用MCGS触摸屏与单片机通讯的心得

    使用MCGS在项目中已经有一年了,有些个人心得如下:1.MCGS的设备驱动是真的不好用,灵活性较差,当然这里针对MCGS与单片机通讯的时候,PLC设备还好.所以如果你想做MCGS与单片机通讯,最好采用 ...

  4. 安卓设备通过USB串口与STM32单片机通讯之二

    安卓设备通过USB串口与STM32单片机通讯之二 本博文系JGB联合商务组的原创作品,引用请标明出处. 本博文接续上一篇的末尾章节. (二) APP的JAVA代码部分(使用Android Studio ...

  5. 【转】dicom通讯的工作方式及dicom标准简介!!

    转自:dicom通讯的工作方式及dicom标准简介 - assassinx - 博客园 本文主要讲述dicom标准及dicom通讯的工作方式.dicom全称医学数字图像与通讯 其实嘛就两个方面 那就是 ...

  6. 通讯可以并联吗_工业控制知识:吃透RS485通讯的连接方式,接485总线就简单多了...

    RS485被广泛使用,可以支持ModBus协议.由于其简单.价优.可靠和成熟,因此,被广泛应用于工业控制.智能仪器和电力通信. 我们来看看RS485的一个典型组网结构: 理论上,RS485总线的传输距 ...

  7. STM8系列单片机程序的下载方式

    STM8系列单片机程序的下载方式 一.概述 二.SWIM硬件接口下载方式 三.UART硬件接口下载方式 四.总结 原文链接:https://www.yourcee.com/newsinfo/29285 ...

  8. 网易im即时聊天php怎么接入,网易云信IM即时通讯功能接入方式与流程_如何收费_企业服务汇...

    编者按:很多企业在考虑使用网易云信提供的IM即时通讯功能,对于企业应当如何接入该功能.接入方式和流程是怎样的.应当如何收费等不太清楚.企业服务汇通过评测网易云信IM即时通讯功能来告诉你答案. 网易云信 ...

  9. android 极光 环信,环信、容联云通讯、极光推送和网易云信IM即时通讯功能接入方式_部署方式_企业服务汇...

    编者按:企业在挑选IM即时通讯功能服务商时,对于企业应当如何接入其IM功能.接入方式和部署方式有哪些等问题不太清楚.今天企业服务汇通过评测环信.容联云通讯.极光推送和网易云信这四家服务商来为你详细说明 ...

最新文章

  1. IDEA maven项目查自动查看依赖关系,解决包冲突问题
  2. jQuery event的复制粘贴的坑
  3. visual studio 的各个版本下载地址
  4. 計算機二級-java06
  5. sql 日期间隔排查双休_免费教程《图解SQL面试题》
  6. HTTP权威指南 文字版 带目录
  7. 罗技鼠标驱动G HUB导致触摸板无法使用
  8. jrtplib库移植到android上
  9. 江苏省谷歌高清卫星地图下载
  10. android 让程序在后台运行,android – 如何让我的应用程序在后台运行?
  11. 学术论文的标准格式是什么?写论文有哪些小技巧?
  12. java代码实现注册发送邮件激活账户
  13. Taro微信小程序实现 美团购物车小红点动画效果
  14. java转go之初体验(一)
  15. 计算雅思成绩C语言,雅思考试总成绩计算查分表
  16. Swift 调用C++代码
  17. 学编程用什么系统好?
  18. Oracle启动错误:ORA-00821: Specified value of sga_target 2352M is too small, needs to be at least 4352M
  19. 速卖通产品如何推广引流?速卖通如何引流?
  20. pdf加密怎么加?在线免费对PDF文档加密

热门文章

  1. JavaScript:RxJS(5.5.9)
  2. 基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY
  3. 【JY】SAFE考虑徐变和收缩效应的长期挠度分析
  4. pythonsklearn乳腺癌数据集_【sklearn数据集】SVM之乳腺癌数据集实战
  5. Pyspark让pandas特征工程代码在集群上飞起来——天猫复购率baseline
  6. 有没有书单视频制作软件?制作书单四步完成
  7. Flutter系统icon图标【全系列】
  8. CNC编程培训,潇洒Powermil编程培训
  9. JavaScript获取某年某月的最后一天
  10. EXCEl-AND函数的使用方法