单片机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
+= 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
-= 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
软件代码被破解抄袭?设计的电路被抄板?工程师如何去规避?
研发工程师,每天面对繁杂的日常工作之外,剩下的时间就是研究开发与设计相关的项目;一个项目从零开始到最后的完成交付,需要付出大量的时间与精力,尤其是针对电子行业领域,其中电路验证的辛酸与软件调试的煎熬,或许只有工程师才懂得;
电路项目
也许工程师会认为,花费几年时间辛苦研发的电路项目产品,在完成量产后就可以顺利面向客户;然而不幸的一幕却悄悄降临了,在研发工程师没有足够安全保密的意识下,之前设计的电路项目产品被市场同行恶意抄袭,导致出现低价竞争,带来了不必要的经济损失;
研发工程师在面对这样的恶意抄袭行为,抄袭工程师研发设计的产品PCB电路板与电路原理图,反向破解产品的软件程序代码等等,有没有什么好的解决之道呢?有没有什么好的方法可以对工程师研发的成果进行有效的保护呢?
防止抄袭
诸如此类电路原理图与软件程序代码抄袭问题,工程师可以采用以下4个方案规避1,保护设计文件
工程师在做电路项目方案设计,通常都有属于自己的办公电脑,相应的开发文件资料自热也是保存在包公电脑里;如果在没有对办公电脑安装加密软件,或许一些重要的设计文件在不经意间被外泄,导致之前的付出努力被顷刻间化为乌有;
通过对工程师的工作电脑系统安装加密软件,即便是通过邮箱或者U盘传输拷贝设计文件,得到的也是一堆乱码,毫无用处的资料,这样就可以有效从源头保护好设计成果,防止因技术文档外泄被抄袭;
电路原理图设计文件
2,可靠供应商
工程师在完成硬件电路的开发,比如电路原理图在完成设计后,需要做相应的PCB Layout布线工作,研发结束需要把相应的PCB Gerber文件交付PCB制造生产供应商,由供应商负责生产PCB线路板;
众所周知,工程师在评审供应商的资质能力时,参考的一个重要指标是对工程师设计项目所在同领域的同行大客户服务能力;
比如热水器,属于家用电器领域;工程师在研发此类项目,一般会优先选用服务家电领域的PCB制造公司作为供应商;问题可能就出在这里,因为供应商面对的服务对象是你的同行,不可靠的供应商可能存在把工程师交付的PCB Gerber文件转交给你的同行,造成抄袭外泄事件;
解决之道:与供应商可以签订NDA保密协议,用以约束相关的行为;
签署协议
3,芯片特殊处理
硬件方案,不仅包含PCB设计方案,而且还包括电路原理图设计方案;为了防止工程师的PCB线路原理图被抄袭,需要了解其抄袭的具体过程:
首先,统计PCB线路板上的BOM表电子元器件,包括型号,数量,品牌等等,尤其是一些关键的芯片型号信息;因为通过查找芯片的型号,可以得知芯片的电路功能,从而掌握工程师研发设计电路的方案;
其次,通过万用表或者其他测试仪器设备方向测量每个电子元器件之间的引脚焊盘电路连接关系,从而得到工程师研发设计的电路原理图;
因此工程师可以把电路设计方案的一些关键芯片,通过打磨的方式把芯片丝印信息抹除,用以隐藏芯片的型号信息;
芯片丝印抹除,工程师可以实现的途径 :
第一:芯片采购之前,与芯片原厂或者芯片贸易商沟通,向他们提出需要抹除芯片丝印的特殊需求
第二:借助第三方芯片丝印处理公司,去除芯片的丝印或者在芯片表面涂上黑硅胶用以遮掩丝印信息;
抹除丝印的芯片
4,加密芯片
前面三个防止抄袭的解决方案,都是从工程师的一些硬件设计因素考虑;而通过加密芯片的处理,就是从工程师软件设计的因素去杜绝被抄袭;那么什么是加密芯片呢?如何去保护不被抄袭呢?
加密芯片
4.1 加密芯片,是指能完成对数据进行加密算法的芯片,比如DES与AES等加密算法;加密型号较多,例如RJG102,LCS2110等等;单片机通过与加密芯片的搭配使用,可以有效阻击单片机程序代码的破解套用;
4.2 加密过程:具体如何通过加密芯片来保护单片机的程序代码呢?
加密芯片工作原理
加密芯片工作过程:
单片机首先向加密芯片发送一个随机数单片机与加密芯片按照加密算法,将随机数计算分别得出结果1与结果2加密芯片将结果2回传给单片机,单片机将结果1与结果2做比较判断是否相同如果相等,则单片机程序进入正常程序;不相等,则单片机进入While(1)死循环,无法执行正常程序;如果单片机的程序代码被破解套用,用于其他类似项目;由于没有加密芯片的加密算法处理的结果2去与单片机进行匹配,程序代码也是不能得到有效的执行,因此可以有效的保护工程师开发的项目;
综上所述, 工程师可以通过“保护设计文件”、“可靠供应商”、“芯片特殊处理”和“加密芯片”这四种方法实现对研发项目的电路原理图与软件程序代码保护,有效防止被抄袭套用,也是对工程师研发成果的知识产权保护;
本文由【芯片哥】原创撰写,喜欢就关注芯片哥,和芯片哥一起加油吧
相关问答
cpu熔断机制?熔丝位是在一个特定的地址上可以读到熔丝状态的一个位。0表示已熔断,1表示未熔断。单片机MCU或者CPU等芯片在特定的引脚外加高电平后,可以通过产生的电流烧断...
加密狗的原理是什么? - 小菜snoopy 的回答 - 懂得加密狗的工作原理:加密狗通过在软件执行过程中和加密狗交换数据来实现加密的。加密狗内置单片机电路(也称CPU),使得加密狗具有判断、分析的处理能力...
加密狗的原理是什么? - VZduEvlXFK 的回答 - 懂得加密狗的原理是:加密锁内置的单片机里包含有专用于加密的算法软件,该软件被写入单片机后,就不能再被读出。这样,就保证了加密锁硬件不能被复制。同...
计算机与智能科学类专业以后主要从事什么,就业前景怎么样?计算机科学与技术是关于计算机的科学和技术。大致上分为两个方向,一个软件,一个硬件。但是并不是有完整的分界线。就像一个人,思想是软件,躯体是硬件。很多...
钳位二极管的原理是什么?一、什么是钳位二极管钳位二极管其实就是TVS管,也就是瞬态抑制二极管的简称(TransientVoltageSuppressor)。它是在稳压二极管的基础上发展而来的,是一种...
盆友们!有谁了解 广州电力监测仪厂家排名,电力监测仪哪个...2007《多功能电能表通信规约》或MODBUS通讯规约。电表采用全屏蔽、全密封结构,用先进的单片机处理系统进行数据的采集、处理和保存,具有良好的抗电...
芯片清洗剂怎么挑选,大家都说说录音芯片与放音芯片的区别?[回答]单片机又称单片微型计算机,虽然它看上去像一块芯片,但是已经具有了基本的处理器,存储器,可以写入一些简单的控制程序,在小型控制电路的应用还是比较...
toto感应龙头价格如何toto感应水龙头配件价格怎么样余姚市宏拓不锈钢制管厂供应的TOTO分体型自动感应式水龙头DLE112AS+DLE114DES单冷交流电。价格是1950元。三铭国际贸易(上海)有限公司供应的TOTO洁具TOTO龙...