介绍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-1], y=v[0], sum=0, e, DELTA=0x9e3779b9;
    long p, q ;
    if (n > 1) {
      q = 6 + 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;
      }
      return 0 ;
    } else if (n < -1) {
      n = -n;
      q = 6 + 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;
      }
      return 0;
    }
    return 1;
  }

瞧,短的惊人吧!

咱也搞不明白数学上的东西,有兴趣的话就去上面那个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个字节整除时,要做好字节的填充和对其等辅助工作。

时间: 2024-11-05 20:06:23

介绍XXTEA加密算法及其C实现的相关文章

XXTEA 加密算法 C++ C#兼容版本

1.一个不错的可逆加密算法XXTEA 之前无意中看到了TexturePacker 使用了XXTEA来加密图片资源.所以花了点时间来看了下XXTEA. 一般有两种加密算法:1.像md5,SHA1,等hash算法,是不可逆的.一般数据库存的用户名和密码就用这个. 2.本文所提到的XXTEA算法,是可逆的,有个key可以加密. 安全方面的东西还蛮多的,说到key,还有什么public key, private key,我都还给老师了.忘光了. 可逆加密算法的需求还是比较广的,像加密游戏存档(发现还是无

XXTEA 加密算法 C++ C#兼容版本号

1.一个不错的可逆加密算法XXTEA 之前无意中看到了TexturePacker 使用了XXTEA来加密图片资源.所以花了点时间来看了下XXTEA. 一般有两种加密算法:1.像md5,SHA1,等hash算法,是不可逆的.一般数据库存的username和password就用这个. 2.本文所提到的XXTEA算法,是可逆的,有个key能够加密. 安全方面的东西还蛮多的,说到key,还有什么public key, private key,我都还给老师了.忘光了. 可逆加密算法的需求还是比較广的,像加

非对称加密算法

介绍 非对称加密算法需要两个密钥:公开密钥(publickey) 和 私有密钥(privatekey) 公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密:如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密 特点 算法强度复杂.安全性依赖于算法与密钥 加密解密速度慢 与对称加密算法的对比 对称加密只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥 非对称密钥体制有两种密钥,其中一个是公开的 RSA 算法原理 找出两个“很大”的质数:P & Q

[转]Java加密算法

如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorithm,安全散列算法) HMAC(Hash Message Authentication Code,散列消息鉴别码) 复杂的对称加密(DES.PBE).非对称加密算法: DES(Data Encryption Standard,数据加密算法) PBE(Password-based encryption

Java加密技术(三)对称加密算法PBE

除了DES,我们还知道有DESede(TripleDES,就是3DES).AES.Blowfish.RC2.RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,这里介绍对称加密的另一个算法--PBE PBE  PBE--Password-based encryption(基于密码加密).其特点在于口令由用户自己掌管,不借助任何物理媒体:采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性.是一种简便的加密方式. 通过java代码实现如下: import java.secur

Java加密技术(二)对称加密算法DES&amp;AES

接下来我们介绍对称加密算法,最常用的莫过于DES数据加密算法. DES  DES-Data Encryption Standard,即数据加密算法.是IBM公司于1975年研究成功并公开发表的.DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密. DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位. 通过jav

RSA加密算法详解

研究RSA 不知为何,这几天突然有些心烦.望苍茫大地,凭添几分忧伤,可能是下雨的缘故.本篇主要想详细介绍RSA加密算法的原理,经常听别人说,这里是自己想搞清楚,弄明白.首先介绍了基本的数学原理,然后给出一个具体的计算例子和相关的理论充分性证明. 皓眸大前端开发学习 转载请注明出处:http://www.haomou.net/2014/08/27/2014_rsa/ RSA由来 1976年以前,所有的加密方法都是同一种模式: (1)甲方选择某一种加密规则,对信息进行加密: (2)乙方使用同一种规则

Java加密技术(二)——对称加密算法DES&AES

接下来我们介绍对称加密算法,最常用的莫过于DES数据加密算法. DES DES-Data Encryption Standard,即数据加密算法.是IBM公司于1975年研究成功并公开发表的.DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密. DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位. 通过java

C# 加密–RSA前端与后台的加密&amp;解密

1. 前言 本问是根据网上很多文章的总结得到的. 2. 介绍 RSA加密算法是一种非对称加密算法. 对极大整数做因数分解的难度决定了RSA算法的可靠性.换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠.假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降.但找到这样的算法的可能性是非常小的.今天只有短的RSA钥匙才可能被强力方式解破.到2016年为止,世界上还没有任何可靠的攻击RSA算法的方式.只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的