XXTEA加密算法C++版
2015-06-16 19:26
267 查看
#define DELTA 0x9e3779b9 #define MX (((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(p&3)^e] ^ z))) static 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; sum -= DELTA; } while (--rounds); } }
BTEA 会加密或解密 n(n > 1) 个字组成的块
v 是一个n个字的数组
key 是4个字节的密钥
n 数组中字的个数,正为加密,负为解密
这个版本是原来的改进版,因为在一些语言中, 原来的版本在初始化z的时候会导致分块错误,更好的方式是放在编码部分块内。而且,在MX函数的定义中,一些程序员会选择用括号来表明操作符的优先级。
相关文章推荐
- C语言之链表详细操作及讲解
- Python调用C/C++的种种方法
- C++ const && define
- 链式队列C++实现
- 约瑟夫问题 C语言循环链表
- Leetcode Merge Sorted Array 关于算法效率的思考
- C++开发者都应该使用的10个C++11特性
- C++基数排序(清楚明了完美详细的实现)
- 为游戏多开做准备,降低游戏的CPU
- float的内存布局
- c++ Builder 死机解决方法
- C++类中:作用
- C++ 自定义控件的移植(将在其它程序中设计的自定义控件,移植到现在的系统中)
- C++程序中获取不带文件路径和后缀的文件名
- c++ builder GroupBox的使用方法,如何把控件拖到TGroupBox上面
- 研究生本科生的创建C++链表
- C++带参数的类成员函数
- 您的服务器组件没有得到合法授权,服务器将会以受限模式运行
- C++中静态成员函数访问非静态成员变量
- 【C++ Primer Plus 9.3】名称空间