码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-10-14 14:21:28      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   使用   ar   java   for   sp   数据   

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

bubuko.com,布布扣

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


3.下载地址

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

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


參考:

XXTEA 可逆加密解密算法


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

标签:style   blog   http   使用   ar   java   for   sp   数据   

原文地址:http://www.cnblogs.com/mengfanrong/p/4023998.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!