如何实现PHP的TEA算法

算法简单,而且效率高,每次可以操作8个字节的数据,加密解密的KEY为16字节,即包含4个int数据的int型数组,加密轮数应为8的倍数,一般比较常用的轮数为64,32,16,QQ原来就是用TEA16来还原密码的.

TEA算法

核心为:

#include <stdint.h>

void encrypt (uint32_t* v, uint32_t* k) {
    uint32_t v0=v[0], v1=v[1], sum=0, i;     /* set up */
    uint32_t delta=0x9e3779b9;          /* a key schedule constant */
    uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */
    for (i=0; i < 32; i++) {           /* basic cycle start */
        sum += delta;
        v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
        v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
    }                              /* end cycle */
    v[0]=v0; v[1]=v1;
}

void decrypt (uint32_t* v, uint32_t* k) {
    uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i;  /* set up */
    uint32_t delta=0x9e3779b9;           /* a key schedule constant */
    uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];  /* cache key */
    for (i=0; i<32; i++) {             /* basic cycle start */
        v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
        v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
        sum -= delta;
    }                       /* end cycle */
    v[0]=v0; v[1]=v1;
}

时间: 2024-11-01 06:30:13

如何实现PHP的TEA算法的相关文章

PHP教程:TEA算法实现

算法简单,而且效率高,每次可以操作8个字节的数据,加密解密的KEY为16字节,即包含4个int数据的int型数组,加密轮数应为8的倍数,一般比较常用的轮数为64,32,16,QQ原来就是用TEA16来还原密码的. TEA算法 核心为: #include <stdint.h> void encrypt (uint32_t* v, uint32_t* k) {     uint32_t v0=v[0], v1=v[1], sum=0, i;           /* set up */     u

TEA算法的VB实现代码

算法   前些日子不少人都要挂QQ,有客户需求就自然有人去研究,所以不少人开始研究QQ的协议.其中最重要的一步就是研究QQ使用的加密算法---TEA算法 关于TEA算法的描述以及C语言源码这里就不多说了,现在给出该算法的VB实现 '       ----------------------------------------------------------------------------------'      |                                     

介绍XXTEA加密算法

TEA算法是由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明,TEA是Tiny Encryption Algorithm的缩写,以加密解密速度快,实现简单著称.TEA算法每一次可以操作64bit(8byte),采用128bit(16byte)作为key,算法采用迭代的形式,推荐的迭代轮数是64轮,最少32轮.为解决TEA算法密钥表攻击的问题,TEA算法先后经历了几次改进,从XTEA到BLOCK TEA,直至最新的XXTEA.XTEA也称做TEAN,它

全球木马库Xavie分析,Google Play上有近800个木马软件

本文讲的是全球木马库Xavie分析,Google Play上有近800个木马软件,我们最近发现了一个名为Xavier(由Trend Micro检测为ANDROIDOS_XAVIER.AXM)的Android木马广告库,其会以静默方式窃取和泄露用户的信息,Xavier的影响目前已经很广泛了.根据趋势科技移动应用程序信誉服务的数据,我们检测到超过800个在Google Play上下载了数百万次的应用程序都已经被嵌入了广告库的SDK.这些应用程序的范围也很广,比如照片美化软件.壁纸和铃声更换的软件都包

QQ2012 Beta3-&amp;gt;QQ2013 Beta1聊天协议剖析

http://www.cnhonkerarmy.com/forum.php?mod=viewthread&tid=153514   背景 QQ,一个通信工具,号称拥有N亿,现在注册QQ已经是10位数了,如果QQ注册的号码是不断递增的话,那么QQ应该已经被注册了至少10亿次.在中国,只要你是经常上网的网民,手中必须得有一个QQ号,当然你也可以没有,但你的朋友.同学.亲戚.同事全都有,大家都通过QQ进行沟通,你不用,要沟通多不方便啊. 作为一个通信工具,必定涉及到网络通信协议.由于腾讯基于QQ这个产

Python中的二叉树查找算法模块使用指南_python

python中的二叉树模块内容: BinaryTree:非平衡二叉树  AVLTree:平衡的AVL树  RBTree:平衡的红黑树 以上是用python写的,相面的模块是用c写的,并且可以做为Cython的包. FastBinaryTree  FastAVLTree  FastRBTree 特别需要说明的是:树往往要比python内置的dict类慢一些,但是它中的所有数据都是按照某个关键词进行排序的,故在某些情况下是必须使用的. 安装和使用 安装方法 安装环境: ubuntu12.04, py

浅谈js中字符和数组一些基本算法题_javascript技巧

最近在刷 fcc的题,跟升级打怪一样,一关一关的过,还挺吸引我的.今天抽时间把 Basic Algorithm Scritping  这部分题做了,根据一些提示,还是比较简单的.有些题的处理方式 方法,我想值得借鉴.比如在项目中有时候要处理一个字符,如果想不到一些相关的方法,还挺费事的,所以,在此记录下来,如果以后遇到一些字符或者数组处理,可以来翻翻这篇文章,希望以此得到一些提示而不是去翻文档. 看到此博文的博友,有更好更简单的代码或者好的想法,请留言交流(我一直觉得只有学习别人的优秀代码才能进

通过PHP的内置函数,通过DES算法对数据加密和解密_php技巧

由于项目的需要,要写一个能生成"授权码"的类(授权码主要包含项目使用的到期时间),生成的授权码将会写入到一个文件当中,每当项目运行的时候,会自动读取出文件中的密文,然后使用唯一的"密钥"来调用某个函数,对密文进行解密,从中解读出项目的使用到期时间. 之前,自己有先试着写了下,主要是base64+md5+反转字符串.算法太过简单,很容易被破解,而且也没有能过做到"密钥"在加解密中的重要性,故而舍之. 后来,查找了相关资料,发现,原来PHP中内置了一

python实现马耳可夫链算法实例分析

  本文实例讲述了python实现马耳可夫链算法的方法.分享给大家供大家参考.具体分析如下: 在<程序设计实践>(英文名<The Practice of Programming>)的书中,第三章分别用C语言,C++,AWK和Perl分别实现了马耳可夫链算法,来通过输入的文本,"随机"的生成一些有用的文本. 说明: 1. 程序使用了字典,字典和散列可不是一个东西,字典是键值对的集合,而散列是一种能够常数阶插入,删除,不过可以用散列来实现字典. 2. 字典的setd