数据的加密传输——单片机上实现TEA加密解密算法

发布者:平和思绪最新更新时间:2016-12-16 来源: eefocus关键字:单片机  TEA  加密解密算法  加密传输 手机看文章 扫描二维码
随时随地手机看文章

  各位大侠在做数据传输时,有没有考虑过把数据加密起来进行传输,若在串口或者无线中把所要传的数据加密起来,岂不是增加了通信的安全性。常用的加密解密算法比如DES、RSA等,受限于单片机的内存和运算速度,实现起来比较困难,但一种叫TEA的加密算法特别适合单片机使用。

  TEA(Tiny Encryption Algorithm)是一种简单高效的加密算法,以加密解密速度快,实现简单著称。算法很简单,TEA算法每一次可以操作64-bit(8-byte),采用128-bit(16-byte)作为key,算法采用迭代的形式,推荐的迭代轮数是64轮,最少32轮。目前我只知道QQ一直用的是16轮TEA。

  我之前做过一个数字的无线对讲机,把语音数据加密后发送,双方事先规定好公共的密钥,就可以进行加密和解密了。至于TEA算法速度,在我看来确实很快,我当时用的是16位的msp430单片机,晶振只有6M,每秒钟大概可以进行两三百次加密和解密的操作(一次加密和解密32字节)。

  说到加密,最简单的方式就是把要发送的数据和同样长度的密码进行异或运算,得到新的数据就是加密后的数据,然后,接收方把加密数据和密码进行异或就能得到原始数据。但这种异或的方法安全性如何,我也说不清楚。

  下面上传了c++实现的TEA算法,可以在vc里面调试看看。我把它改了改,让它适合单片机使用,下面的TEA.h和TEA.c可以包含在你的工程里面。使用时,根据你所要加密的数据包长度修改宏定义BLOCK_SIZE,密钥的长度是16字节。数据和密钥都是存放在数组里面的,比如:



//TEA密钥

unsigned char TEA_key[16]=

    0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,

    0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10

};


//数据缓冲区

unsigned char TX_buffer[32];

unsigned char RX_buffer[32];


加密时使用函数:

btea_encrypt(TX_buffer,TEA_key);      //TEA加密

这样,数组TX_buffer里面的新内容就是加密后的数据。


接收到的密文数据存放在RX_buffer里面,调用下面函数:

decrpyt(RX_buffer,TEA_key);      //TEA解密

就能得到之前的明文。



/*******************

  TEA加密解密算法

*******************/


#include "TEA.h"



#define MX                (z>>5^y<<2)+(y>>3^z<<4)^(sum^y)+(k[p&3^e]^z)

#define DELTA             0x9e3779b9

#define S_LOOPTIME        1        //5

#define BLOCK_SIZE        31       //PAGE_SIZE,根据你所要加密的数据包长度修改此参数(单位:字节)


/* 

*key  maybe 128bit =16 Bytes.

*buf  maybe BLOCK_SIZE

*/


void btea_encrypt( unsigned char* buf, unsigned char* key )

{

    unsigned char n=BLOCK_SIZE/4;

    unsigned long *v=(unsigned long *)buf;

    unsigned long *k=(unsigned long *)key;

    unsigned long z = v[n - 1],y = v[0],sum = 0,e ;

    unsigned char p,q ;

    // Coding Part 

    

    q = S_LOOPTIME + 52 / n ;

    while ( q-- > 0 )

    {

        sum += DELTA ;

        e = sum >> 2 & 3 ;

        for ( p = 0 ; p < n - 1 ; p++ )

          y = v[p + 1],

          z = v[p] += MX;

          y = v[0] ;

        z = v[n - 1] += MX;

    }

}



/*

*key  maybe 128bit =16Bytes.

*buf  maybe BLOCK_SIZE

inbuf == outbuf == buf

*/


void btea_decrpyt( unsigned char* buf, unsigned char* key )

{

    unsigned char n=BLOCK_SIZE/4;

    unsigned long *v=(unsigned long *)buf;

    unsigned long *k=(unsigned long *)key;

    unsigned long z = v[n - 1],y = v[0],sum = 0,e ;

    unsigned char  p,q ;

    

    //Decoding Part...

    q = S_LOOPTIME + 52 / n ;

    sum = q * DELTA ;

    while ( sum != 0 )

    {

        e = sum >> 2 & 3 ;

        for ( p = n - 1 ; p > 0 ; p-- )

            z = v[p - 1],

            y = v[p] -= MX;

            z = v[n - 1] ;

        y = v[0] -= MX;

        sum -= DELTA ;

    }

}


 



#ifndef __TEA_h__

#define __TEA_h__



//TEA加密函数

void btea_encrypt( unsigned char* buf, unsigned char* key );

//TEA解密函数

void btea_decrpyt( unsigned char* buf, unsigned char* key );



#endif



关键字:单片机  TEA  加密解密算法  加密传输 引用地址:数据的加密传输——单片机上实现TEA加密解密算法

上一篇:实现AT24C02的数据读写操作
下一篇:Keil C51 与 ARM 并存的方法

推荐阅读最新更新时间:2024-03-16 15:25

一文详解MCS-51单片机的中断系统
MCS-51中断系统:5个中断源(两个外部中断, 两个定时器, 一个串口),2个优先级 中断相关概念 中断:当CPU正在处理某件事情时,单片机外部或内部发生的某一紧急事件请求CPU立即去处理,于是,CPU暂时中止当前的工作,转去处理这个紧急事件,待处理完毕后,再回到原来被中止的地方,继续原来的工作。 中断过程 中断发生:CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理; 中断响应和中断服务:CPU暂时中断当前的工作,转去处理事件B(B的优先级要高于A); 中断返回:待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A ; 中断源(中断请求源):能够向CPU发出中断申请的部件。 中断系统结
[单片机]
一文详解MCS-51<font color='red'>单片机</font>的中断系统
PIC单片机通用同步异步收发器的编程应用
0 引言 PIC18Fxx8单片机是美国微芯公司推出的16位RISC指令集的高级产品,由于芯片内含有A/D、内部E2PROM存储器、I2C和SPI接口、CAN接口、同步/异步串行通信(USART)接口等强大的功能,具有很好的应用前景。但是,目前介绍其应用和以C语言编程的中文参考资料很少。本文将探讨该型单片机异步串行通信的编程应用,程序用HI-TECH PICC-18 C语言编写,并在重庆大学-美国微芯公司PIC单片机实验室的PIC18F458实验板上通过。 1 PIC18FXX8单片机同步/异步收发器(USART) 通用同步/异步收发器(USART)模块是由PIC18FXX8内的三个串行I/O模块组成的器件之
[单片机]
PIC<font color='red'>单片机</font>通用同步异步收发器的编程应用
SST89C54与CF卡的接口设计与实现
1 引言 电子存储设备的不断涌现,使许多便携设备大容量数据的实时处理和存储成为可能,CF卡(CompactFlash card)因具有容量大、体积小、性能优良、携带方便等优点,已广泛应用在数据采集系统和许多消费类电子产品中。然而目前所开发的产品成本高,电路复杂,所需元器件数目多,严重制约了CF卡在更广阔领域内的应用。本文给出了一种简洁实用的硬件接口电路.成功实现了单片机对CF卡标准文件的读写。 2 接口电路设计 接口电路如图1所示,采用与80C51兼容的SST89C54型单片机。SST89C54程序存储器分为block0和block1两块,前者为16 KB,后者为4 KB,block0和block1的地址不是连续的。Block1
[缓冲存储]
基于单片机的无线传感器网络节点制作及组网设计方案
1. 引言   早在上世纪70年代,就出现了采用点对点传输、连接传感控制器而构成的传感器网络雏形,我们把它归之为第一代传感器网络。随着相关学科的不断发展和进步,传感器网络同时还具有了获取多种信息信号的综合处理能力,并通过与传感器控制器的相联,组成了有信息综合和处理能力的传感器网络,这是第二代传感器网络。到了20世纪90年代后期,随着传感器技术的发展,智能传感器采用现场总线连接传感控制器构成局域网,这就是第三代传感器网络。现在,传感器网络以无线传感器网络为标志,它正处于研究和发展的阶段,我们称之为第四代传感器网络。无线传感器网络是新一代的传感器网络,可以应用在军事:环保,医疗以及空间探索等许多领域,可以说它具有非常广泛的应用前景
[单片机]
基于<font color='red'>单片机</font>的无线传感器网络节点制作及组网设计方案
ESP8266与单片机之间通过SPI进行双向数据传输的一种方案
背景: 在我的毕业设计中需要单片机将采集到的数据上传到服务器,同时需要接收来自服务器的一些天气信息,我的单片机的型号是 Stm32F407; ESP8266 刷入了 micropython 的固件,使用python进行开发; 协议是 SPI协议 ESP8266 主机 Stm32F4作为 从机 单片机侧使用的是 Stm32F407 的硬件 SPI + DMA 接收发送。 ESP8266 侧使用的也是硬件SPI1 ; 通讯速度应该可以跑满 单片机这一侧的极限速度(42MHz),但是我在测试时候发现数据在40M 就很不稳定了(逻辑分析仪测试,可能是导线有点长) 最终就选择了4MHz.。 整体的这个实现的机制就是在单片机里面设
[单片机]
ESP8266与<font color='red'>单片机</font>之间通过SPI进行双向数据传输的一种方案
51单片机堆栈操作指令举例说明
堆栈操作 指令 有两条: PUSH direct POP direct 第一条指令称之为推入,就是将direct中的内容送入堆栈中,第二条指令称之为弹出,就是将堆栈中的内容送回到direct中。推入指令的执行过程是,首先将SP中的值加1,然后把SP中的值当作地址,将direct中的值送进以SP中的值为地址的RAM单元中。例: MOV SP,#5FH MOV A,#100 MOV B,#20 PUSH ACC PUSH B 则执行第一条PUSH ACC指令是这样的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后, 内存60H单元的值就是100,同样,执行PUSH B时,是将SP+
[单片机]
硬核MCU技术为汽车智能化控制保驾护航
11月3日,“2020年度硬核中国芯领袖峰会暨评选颁奖盛典”在深圳举办,历时4个月的“2020 硬核中国芯”评选结果隆重揭晓。 比亚迪半导体有限公司获得 “2020年度最具影响力IC设计企业”重磅奖项。同时,国内首款高集成、三合一主控 MCU (BF5823AM48)产品也以集成、高效、低功耗等优势一举获得“2020年度最佳国产MCU产品奖”。 “2020 硬核中国芯”评选活动获得近150家半导体企业积极参评,评选期间共计40万电子工程师、近40位业内专家评委参与评分,评选出2020年最具代表性的中国芯片企业和产品。 种种殊荣的获得并不是偶然,这离不开比亚迪在半导体领域的破局、深耕和创新。自2003年比亚迪半导体成立以
[汽车电子]
硬核<font color='red'>MCU</font>技术为汽车智能化控制保驾护航
51单片机驱动LCD1602的电路图+程序
如网页上出现格式错乱可从此处本例的完整 源码 : http://www.51hei.com/f/1602430.rar 上图是仿真效果 显示2行字符. #include AT89x51.h #define uchar unsigned char /***************************************** 电路连接 P1------DB0~DB7 P2.0------RS P2.1------RW P2.2------E *****************************************/ #define LCD_DB P1 sbit LCD_RS=P2^0; sbit LC
[单片机]
51<font color='red'>单片机</font>驱动LCD1602的电路图+程序
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved