介绍XXTEA加密算法及其C实现
介绍XXTEA加密算法及其C实现
http://en.wikipedia.org/wiki/XXTEA
“微型加密算法(TEA)及其相关变种(XTEA,Block TEA,XXTEA)都是分组加密算法,它们很容易被描述,实现也很简单(典型的几行代码)。
TEA 算法最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 1994 年设计的。该算法使用 128 位的密钥为 64 位的信息块进行加密,它需要进行 64 轮迭代。该算法使用了一个神秘常数δ作为倍数,它来源于黄金比率,以保证每一轮加密都不相同。但δ的精确值似乎并不重要,这里 TEA 把它定义为 δ=「(√5 - 1)231」(也就是程序中的 0×9E3779B9 )。”
其实,TEA跟我们的关系非常密切,因为QQ就是使用16轮迭代的TEA算法。
XXTEA是其最新的变种,于1998年提出。目前还没有人找到对其进行攻击的方法,是对前面一些变种的改进。XXTEA 算法很安全,而且非常快速,非常适合应用于 Web 开发中。
下面是作者给出的该算法的C实现:
#define MX (z>>5^y<<2) + (y>>3^z<<4)^(sum^y) + (k[p&3^e]^z);
long btea(long* v, long n, long* k) {
unsigned long z=v[n-], y=v[], sum=, e, DELTA=0x9e3779b9;
long p, q ;
if (n > ) {
q = + /n;
while (q-- > ) {
sum += DELTA;
e = (sum >> ) & ;
for (p=; p<n-; p++) y = v[p+], z = v[p] += MX;
y = v[];
z = v[n-] += MX;
}
return ;
} else if (n < -) {
n = -n;
q = + /n;
sum = q*DELTA ;
while (sum != ) {
e = (sum >> ) & ;
for (p=n-; p>; p--) z = v[p-], y = v[p] -= MX;
z = v[n-];
y = v[] -= MX;
sum -= DELTA;
}
return ;
}
return ;
}
瞧,短的惊人吧!
咱也搞不明白数学上的东西,有兴趣的话就去上面那个wikipedia里看吧。我这里就讲讲怎么用。
teab will encode or decode n words as a single block where n > 1
- v is the n word data vector
- k is the 4 word key
- n is negative for decoding
- if n is zero result is 1 and no coding or decoding takes place, otherwise the result is zero
- assumes 32 bit ‘long’ and same endian coding and decoding
这是wikipedia里的说明,讲得比较明白了。
最核心的是要明白:XXTEA算法使用128bit的密钥对以32bit为单位的信息块进行加密。
这段介绍里的'word’这个词让我很费了一番周折。我开始以为是“字”,也就是2byte,16bit。但是在我耗费了不少时间进行测试和实验后,可以确定,word在这里不是一个单位,大概是要翻译成“组元”之类的词,其实就是后面说的一个32bit的long类型。
搞清楚这个,别的就没什么了。刚才那段代码:
long btea(long* v, long n, long* k)
v是要加密的组元的起始地址,以32bit为单位,这里用long来实现。
n是要加密的组元个数,正数是加密,负数是解密。
k是密钥的起始地址,长度为4个组元,4*32=128bit。
返回值为0或1(对应n=0,没有计算)。
加密的结果会直接写回到v中。
经过试验,我还有一点要补充的,XXTEA的计算是空间相关的,也就是说,在一个组元中,4个字节是不能断章取义的,即密文的一部分,并不能还原成明文的一部分。所以,当数据不能被4个字节整除时,要做好字节的填充和对其等辅助工作。
介绍XXTEA加密算法及其C实现的更多相关文章
- Tea加密算法和XxTea加密算法
TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位密码,与BlowFish一样TEA每次只能加密/解密8字节数据.TEA特点是速度快.效率高,实现也 ...
- XXTEA 加密算法 C++ C#兼容版本号
1.一个不错的可逆加密算法XXTEA 之前无意中看到了TexturePacker 使用了XXTEA来加密图片资源.所以花了点时间来看了下XXTEA. 一般有两种加密算法:1.像md5,SHA1,等ha ...
- 介绍对称加密算法,最常用的莫过于DES数据加密算法
DES DES-Data Encryption Standard,即数据加密算法.是IBM公司于1975年研究成功并公开发表的.DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个 ...
- 介绍对称加密的另一个算法——PBE
除了DES,我们还知道有DESede(TripleDES,就是3DES).AES.Blowfish.RC2.RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,这里介绍对称加密的另一个算法 ...
- RSA加密算法详解(二)
研究RSA 不知为何,这几天突然有些心烦.望苍茫大地,凭添几分忧伤,可能是下雨的缘故.本篇主要想详细介绍RSA加密算法的原理,经常听别人说,这里是自己想搞清楚,弄明白.首先介绍了基本的数学原理,然后给 ...
- [转]Java加密算法
如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorit ...
- 各种Java加密算法
如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorit ...
- RSA加密算法在WEB中的应用
加密算法有很多,如不可逆的摘要算法MD5.SHA(安全哈希算法),可逆的Base64编码,对称加密算法DES.AES,还有非对称加密算法DH.RSA等.那是不是说明我们可以使用任何一种加密算法就能保证 ...
- .NET Core加解密实战系列之——对称加密算法
简介 加解密现状,编写此系列文章的背景: 需要考虑系统环境兼容性问题(Linux.Windows) 语言互通问题(如C#.Java等)(加解密本质上没有语言之分,所以原则上不存在互通性问题) 网上资料 ...
随机推荐
- jQuery动态添加元素事件
在项目中遇到需要jQuery动态添加元素的事件,做了一个demo,方便以后遇到相同的问题可以用上: <!DOCTYPE html> <html> <head> &l ...
- onS 记录
1.用户的解锁 用户因多次登录失败而被锁的情况下,可用faillog命令来解锁.具体如下 ...
- use include to read a file
#include<iostream> #include<fstream> using namespace std; void process(string filename) ...
- MVC3+EF4.1学习系列(十一)----EF4.1常见的问题解决
博客写了10篇了~有很多朋友私信问了一些问题,而且很多问题 大家问的都一样 这里说说这些常见问题的解决办法.如果大家有更好的解决办法~也希望分享出来 问题大概为这几个 一.ef4.1 codeFirs ...
- .Net Core 第三方工具包整理
本地日志[NLog.Extensions.Logging]:https://github.com/NLog/NLog.Extensions.Logging
- [ An Ac a Day ^_^ ] hrbust 2291 Help C5 分形
开博客这么久从来没写过自己学校oj的题解 今天写一篇吧 嘿嘿 原题链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProble ...
- hdu 1028 Ignatius and the Princess III(母函数入门+模板)
Description "Well, it seems the first problem is too easy. I will let you know how foolish you ...
- VC 中使用 CToolTipCtrl 消失后不再出现的Bug。。。。
最近用WTL重写CGdipButton.从ButtonST中将CtoolTipCtrl的相关代码转过来,发现一个问题: ToolTip可以显示,鼠标移开后再移动到button上也可以再次显示,但是按下 ...
- C++对象模型笔记之程序设计模型
C++程序设计模型支持三种程序设计模型 1.程序模型(procedural model) 可以理解为过程化模型,就像C一样 2.抽象数据类型模型(ADT) 数据结构教材里有说过,查了下资料也不是很明确 ...
- java反射机制(2)
首先,我们在开始前提出一个问题: 1.在运行时,对于一个java类,能否知道属性和方法:能否去调用它的任意方法? 答案是肯定的. 本节所有目录如下: 什么是JAVA的反射机制 JDK中提供的Refle ...