适用于单片机的数据加密算法:xxtea
转:https://www.cnblogs.com/LittleTiger/p/4384741.html
各位大侠在做数据传输时,有没有考虑过把数据加密起来进行传输,若在串口或者无线中把所要传的数据加密起来,岂不是增加了通信的安全性。常用的加密解密算法比如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字节。数据和密钥都是存放在数组里面的
加密时使用函数:
btea_encrypt(TX_buffer,TEA_key); //TEA加密
这样,数组TX_buffer里面的新内容就是加密后的数据。
接收到的密文数据存放在RX_buffer里面,调用下面函数:
decrpyt(RX_buffer,TEA_key); //TEA解密
就能得到之前的明文。
/* XXTEA,又称Corrected Block TEA,是XTEA的升级版,设计者是Roger Needham, David Wheeler */ #include <stdio.h> #define DELTA 0x9e3779b9 #define MX (((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(p&3)^e] ^ z))) ]) { uint32_t y, z, sum; unsigned p, rounds, e; ) /* Coding Part */ { rounds = + /n; sum = ; z = v[n-]; do { sum += DELTA; e = (sum >> ) & ; ; p<n-; p++) { y = v[p+]; z = v[p] += MX; } y = v[]; z = v[n-] += MX; } while (--rounds); } ) /* Decoding Part */ { n = -n; rounds = + /n; sum = rounds*DELTA; y = v[]; do { e = (sum >> ) & ; ; p>; p--) { z = v[p-]; y = v[p] -= MX; } z = v[n-]; y = v[] -= MX; sum -= DELTA; } while (--rounds); } } int main() { uint32_t v[]= {,}; uint32_t ]= {,,,}; ; //n的绝对值表示v的长度,取正表示加密,取负表示解密 // v为要加密的数据是两个32位无符号整数 // k为加密解密密钥,为4个32位无符号整数,即密钥长度为128位 printf(],v[]); btea(v, n, k); printf(],v[]); btea(v, -n, k); printf(],v[]); ; }
适用于单片机的数据加密算法:xxtea的更多相关文章
- 跨平台的加密算法XXTEA 的封装
跨平台的加密算法XXTEA 的封装 XXTEA算法的结构非常简单,只需要执行加法.异或和寄存的硬件即可,且软件实现的代码非常短小,具有可移植性. 维基百科地址:http://en.wikipedia. ...
- 单片机modebus RTU通信实现,采用C语言,可适用于单片机,VC,安卓等(转)
源:单片机modebus RTU通信实现,采用C语言,可适用于单片机,VC,安卓等 //modebus_rtu.c /***************************************** ...
- 介绍对称加密算法,最常用的莫过于DES数据加密算法
DES DES-Data Encryption Standard,即数据加密算法.是IBM公司于1975年研究成功并公开发表的.DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个 ...
- 3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)
3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...
- xxtea---单片机数据加密算法
转:https://www.cnblogs.com/LittleTiger/p/4384741.html 各位大侠在做数据传输时,有没有考虑过把数据加密起来进行传输,若在串口或者无线中把所要传的数据加 ...
- 数据加密算法--详解DES加密算法原理与实现
DES算法简介 DES(Data Encryption Standard)是目前最为流行的加密算法之一.DES是对称的,也就是说它使用同一个密钥来加密和解密数据. DES还是一种分组加密算法,该算法每 ...
- 目前常用的加密算法有DES(Data Encryption Standard)和IDEA(International Data Encryption Algorithm)国际数据加密算法等,请用工厂方法实现加密算法系统。提交该系统的代码,该系统务必是一个可以能够直接使用的系统,查阅资料完成相应加密算法的实现;
1.加密算法的类图结构 2.源代码 2.1代码运行截图 2.2代码的目录结构 2.3具体代码 MethodFactory.java package jiami; public interface Me ...
- 51单片机RAM 数据存储区学习笔记
转自:http://www.eepw.com.cn/article/216237_2.htm 1.RAM keil C语言编程 RAM是程序运行中存放随机变量的数据空间.在keil中编写程序,如果当前 ...
- Android 数据加密算法 Des,Base64详解
一,DES加密: 首先网上搜索了一个DES加密算法工具类: import java.security.*;import javax.crypto.*; public class DesHelper { ...
随机推荐
- java:数据结构(二)栈的应用(括号匹配)
一.什么是括号匹配: 括号匹配就是利用计算机辨别表达式里面的括号是否书写成功 例如: {()((a)) }这就是一个正确 (()() 这就是一个错误的 二.括号匹配的算法: 众所周知,括号分为花括 ...
- 测者的测试技术手册:测试应该关注java.util.List.subList的坑
java中有一个返回子列表的方法: public list<E> subList(int fromIndex, int toIndex){ subListRangeCheck( ...
- C# -- 等待异步操作执行完成的方式
C# -- 等待异步操作执行完成的方式 1. 等待异步操作的完成,代码实现: class Program { static void Main(string[] args) { Func<int ...
- Django 使用mysql 创建项目
一.安装 mysql 和 mysqlclient 1. 安装 mysql ,https://www.jianshu.com/p/07a9826898c0 2. pip3 install mysqlcl ...
- BZOJ 1171: 大sz的游戏
ZJOI讲课的题目,数据结构什么的还是很友好的说 首先我们发现题目中提到的距离\(\le L\)的东西显然可以用单调队列维护 但是暴力搞去不掉区间并的限制,那么我们考虑从区间并入手 对于这种问题的套路 ...
- 在 .NET Core 中运行 JavaScript
一.前言 在 .NET Framework 时,我们可以通过V8.NET等组件来运行 JavaScript,不过目前我看了好几个开源组件包括V8.NET都还不支持 .NET Core ,我们如何在 . ...
- 新增和修改页面的用例设计和Bug提交
问题: 新增页面和修改页面,基本上输入框都一样,那比如同一个输入框的用例设计: 1. 写了新增页面的用例,修改页面对该输入框还有再写一遍用例的必要吗? 2. 执行用例时,新增页面验证了必填项,长度,数 ...
- API简介
概述 API(Application Programming Interface),应用程序编程接口.Java API是一本程序员的 字典 ,是JDK中提供给我们使用的类的说明文档.这些类将底层的代码 ...
- 菜鸟学IT之python网页爬取多页爬取
作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3002 0.从新闻url获取点击次数,并整理成函数 newsUrl news ...
- javascript深入浅出——学习笔记(包装对象和类型检测)
3包装对象:https://www.imooc.com/video/5676 当我们尝试把基本类型已对象的方式访问时,javascript会把该基本类型转换为对应的包装类型对象(临时对象),相当于ne ...