• 技术文章 >php教程 >php手册

    如何实现PHP的TEA算法

    2016-06-06 19:56:20原创437

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

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

    TEA算法

    核心为:

    #include

    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;
    }

    [1] [2] [3] [4] [5]

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:新一代 PHP 框架 QeePHP 发布 下一篇:用PHP for Microsoft AJAX Library增强PHP编程
    Web大前端开发直播班

    相关文章推荐

    • 使用 Zend Opcache 加速 PHP,zendopcache• php正则匹配文章中的远程图片地址并下载图片至本地,• PHP中的一些常用函数收集• php使用cookie实现记住用户名和密码实现代码,phpcookie• 如何使用jQuery+PHP+MySQL来实现一个在线测试项目

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网