TEA加密
TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位密码,与BlowFish一样TEA每次只能加密/解密8字节数据。TEA特点是速度快、效率高,实现也非常简单,用C语言实现TEA加密/解密算法只需26行代码。由于针对TEA的攻击不断出现,所以TEA也发展出几个版本,分别是XTEA、Block TEA和XXTEA。
TEA加密和解密时都使用一个常量值,这个常量值为0x9e377b9,这个值是近似黄金分割率,注意,有些编程人员为了避免在程序中直接出现"mov 变量,0x9e377b9",以免被破解者直接搜索0x9e377b9这个常数得知使用TEA算法,所以有时会使用"sub 变量,0x61C88647"代替"mov 变量,0x9e377b9",0x61C88647=-(0x9e377b9)。
下面给出一个例子来分析,这个例子同样引入一个加密库,调用加密库中的tea_encrypt函数来实现对数据使用tea_encrypt加密,代码如下:
#include <windows.h> #include <my_crypto.h> main() { ]={"Hello"}; //8字节明文数据 ]={"WORLD!!"}; //128位密码 unsigned ; //32轮加密 tea_encrypt (&data, &key, round); //TEA加密函数 }
重点关注上面的tea_encrypt函数调用,调用tea_encrypt函数代码的反汇编代码如下:
mov eax,dword ptr [ebp-1Ch] ;eax=32 push eax lea ecx,[ebp-18h] ;ecx指向密码 push ecx ] ;edx指向明文数据 0040106C push edx 0040106D call tea_encrypt (004010c2) ;TEA加密函数 add esp,0Ch
跟进tea_encrypt函数内部,代码如下:
)]
执行上面的跳转指令来到下面的代码,这里是真正的tea_encrypt加密函数入口:
100092D3 mov eax,dword ptr [esp+10h] ;eax指向密码 100092D7 mov edx,dword ptr [eax+0Ch] 1] 100092DD push ebx 100092DE mov ebx,dword ptr [esp+10h] ;edx指向明文 100092E2 push ebp 100092E3 mov ebp,dword ptr [esp+1Ch] ;ebp等于迭代次数 100092E7 push esi 100092E8 mov esi,dword ptr [eax] 100092EA mov dword ptr [esp+0Ch],edx 100092EE push edi 1] 100092F2 mov eax,dword ptr [ebx] 100092F4 xor edx,edx 100092F6 test ebp,ebp 100092F8 mov dword ptr [esp+14h],ecx 1] 1 mov dword ptr [esp+20h],ebp mov ebx,ecx 000930A add ebx,edi 1000930C mov ebp,ecx 1 add ebp,esi xor ebx,ebp sub edx,61C88647h ;这条指令相当于add edx, 0x9e3779b 1000931B lea ebp,[edx+ecx] 1000931E xor ebx,ebp add eax,ebx mov ebx,eax add ebx,dword ptr [esp+10h] 1000932B mov ebp,eax 1 add ebp,dword ptr [esp+14h] xor ebx,ebp lea ebp,[edx+eax] xor ebx,ebp 1000933B add ecx,ebx 1 mov edx,dword ptr [esp+1Ch] pop edi pop esi 1000934A pop ebp 1000934B mov dword ptr [edx],eax ;密文的低32位数据 1],ecx ;密文的高32位数据 pop ebx ret pop edi pop esi pop ebp mov dword ptr [ebx],eax ;密文的低32位数据 1],ecx ;密文的高32位数据 1000935D pop ebx 1 ret
10009315处的代码sub edx,61C88647h是识别TEA算法的关键,sub edx,61C88647h = add edx,0x9e377b9。0x9e377b9是TEA算法使用的常数,所以可以初步确定上面的代码是TEA加密代码。
TEA加密的更多相关文章
- Tea加密算法和XxTea加密算法
TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位密码,与BlowFish一样TEA每次只能加密/解密8字节数据.TEA特点是速度快.效率高,实现也 ...
- 数据的加密传输——单片机上实现TEA加密解密算法
各位大侠在做数据传输时,有没有考虑过把数据加密起来进行传输,若在串口或者无线中把所要传的数据加密起来,岂不是增加了通信的安全性.常用的加密解密算法比如DES.RSA等,受限于单片机的内存和运算速度,实 ...
- 单片机上使用TEA加密通信(转)
源:单片机上使用TEA加密通信 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:MDK4.72 单片机:STM32 说 ...
- C++ Base64编码解码、MD5及TEA加密解密
Crypto.h以及Crypto.cpp Crypto.h 123456789101112131415161718192021222324252627282930313233343536373839 ...
- TEA加密/解密算法
在游戏项目中,一般需要对资源或数据进行加密保护,最简单高效的加密算法就是采用位与或之类的,但是比较容易被人分析出来.TEA加密算法不但比较简单,而且有很强的抗差分分析能力,加密速度也比较快.可以根据项 ...
- QQ协议的TEA加解密算法
QQ通讯协议里的加解密算法. #include <stdio.h> #include <stdlib.h> #include <memory.h> #include ...
- keil TEA
http://bbs.mydigit.cn/read.php?tid=545086 #include "reg52.h" void send_char(unsigned char ...
- TEA加密算法java版
这个算法简单,而且效率高,每次可以操作8个字节的数据,加密解密的KEY为16字节,即包含4个int数据的int型数组,加密轮数应为8的倍数,一般比较常用的轮数为64,32,16,推荐用64轮. 源代码 ...
- tea加密算法及其变种的研究
tea 介绍 "TEA" 的全称为"Tiny Encryption Algorithm" 是1994年由英国剑桥大学的David j.wheeler发明的. T ...
随机推荐
- MySQL表复制
http://www.2cto.com/database/201202/120259.html http://www.cnblogs.com/sunss/archive/2010/10/08/1845 ...
- CRC校验源码分析
这两天做项目,需要用到 CRC 校验.以前没搞过这东东,以为挺简单的.结果看看别人提供的汇编源程序,居然看不懂.花了两天时间研究了一下 CRC 校验,希望我写的这点东西能够帮助和我有同样困惑的朋友节省 ...
- UML--核心元素之业务实体
如果说参与者和用例描述了我们在这个问题领域中达到什么样的目标,那么业务实体就描述了我们使用什么来达到业务目标以及通过什么来记录这个业务目标. 如果把问题领域比喻成一幢大楼的话,业务实体就是构成这幢大楼 ...
- jquery使用总结
jquery使用总结-常用DOM操作 (1)查询或设置元素属性操作 html() //获取匹配元素集合中的第1个元素 html(htmlString) //为匹配集合中的所有元素设置内容 tex ...
- Calculate Number Of Islands And Lakes 解答
Question 1 1 1 1 1 01 0 1 0 0 11 0 1 0 0 11 1 0 1 1 1 1 is earth, 0 is water. i) count the number of ...
- 【BBST 之伸展树 (Splay Tree)】
最近“hiho一下”出了平衡树专题,这周的Splay一直出现RE,应该删除操作指针没处理好,还没找出原因. 不过其他操作运行正常,尝试用它写了一道之前用set做的平衡树的题http://codefor ...
- obiz
ofbiz 安装 1. 由 binary 安装: 由 binary 安装非常简单, 以下是安装方法: 下载ofbiz-2.0-beta1-complete.tar.gz, 注意不是ofbiz-2.0- ...
- linux之getcwd函数解析
[lingyun@localhost getcwd]$ cat getcwd.c /********************************************************** ...
- linux文件权限整理
网上对linux文件权限的已经很多,不过还是要自己整理一下,不然每次都要查资料. linux下所有东西都是文件,包括设备,所以这里的文件也包括文件夹. 先是查看文件权限:ls -lh xzc@xzc- ...
- ios delegate 和 block
//委托的协议定义 @protocol UpdateDelegate <NSObject> - (void)update; @end @interface Test : NSObject ...