zoukankan      html  css  js  c++  java
  • XXTEA 加密算法 C++ C#兼容版本号

    1.一个不错的可逆加密算法XXTEA


    之前无意中看到了TexturePacker 使用了XXTEA来加密图片资源。所以花了点时间来看了下XXTEA。

    一般有两种加密算法:1.像md5,SHA1,等hash算法,是不可逆的。一般数据库存的username和password就用这个。

                                        2.本文所提到的XXTEA算法,是可逆的,有个key能够加密。

    安全方面的东西还蛮多的,说到key,还有什么public key, private key,我都还给老师了。忘光了。


    可逆加密算法的需求还是比較广的,像加密游戏存档(发现还是无法防止内存改动),加密日志,加密图片等。

    可逆加密算法我的要求比較简单:

    1.足够安全,2.速度快,3.跨语言


    2.XXTEA代码

     #include <stdint.h>
      #define DELTA 0x9e3779b9
      #define MX (((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(p&3)^e] ^ z)))
     
      void btea(uint32_t *v, int n, uint32_t const key[4]) {
        uint32_t y, z, sum;
        unsigned p, rounds, e;
        if (n > 1) {          /* Coding Part */
          rounds = 6 + 52/n;
          sum = 0;
          z = v[n-1];
          do {
            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;
          } while (--rounds);
        } else if (n < -1) {  /* Decoding Part */
          n = -n;
          rounds = 6 + 52/n;
          sum = rounds*DELTA;
          y = v[0];
          do {
            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;
          } while ((sum -= DELTA) != 0);
        }
      }

    这个是wiki上抄的代码,能够看出代码很简短,加密和解密合起来都仅仅有这么点。

    对C语言还真是不熟悉,网上找了个C++和C#的代码,发现写的还不错。能够对随意字符串(包含中文),用字符串作为key加密。结果是经过base64变成了简单的字符串,这样能够比較方便处理。

    int _tmain(int argc, _TCHAR* argv[])
    {
    	string painText = "hello world 啊";
    	char * temp =(char *) painText.c_str();
    	string key = "1234567890abcdef";//秘钥
    	cout<< "pain text:"<<painText<<endl;
        string result = xxtea_encrypt(painText,key);//加密
    	cout<<"encrypt result:" <<result<<endl;
    	string result_1 = xxtea_decrypt(result,key);//解密
    	cout<< "decrypt result:" <<result_1<<endl;
    	system("pause");
    	return 0;
    }

    尝试去找了下java版本号,不知道为什么不兼容,以后再看。


    3.下载地址

    资源是 http://my.csdn.net/jxjgssylsg 那下载的。

    http://www.waitingfy.com/?attachment_id=1159


    參考:

    XXTEA 可逆加密解密算法


  • 相关阅读:
    swift网络数据请求方法
    使用jQuery在javascript中自定义事件
    javascript循环事件只响应最后一次的问题处理
    关于PHP 时区错误的问题
    安装MySql出现Error Nr.1045的解决办法
    view的阴影效果shadowColor
    关于Swift中的泛函数find的问题
    [BZOJ3196][Tyvj1730]二逼平衡树
    [BZOJ4671]异或图
    [BZOJ4621]Tc605
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4023998.html
Copyright © 2011-2022 走看看