C++ XXTEA分组加密解密算法
来源:互联网 发布:vs2013写c语言 编辑:程序博客网 时间:2024/06/06 07:14
微型加密算法(TEA)及其相关变种(XTEA,Block TEA,XXTEA)都是分组加密算法,它们很容易被描述,实现也很简单(典型的几行代码)。
TEA 算法最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 1994 年设计的。该算法使用 128 位的密钥为 64 位的信息块进行加密,它需要进行 64 轮迭代。该算法使用了一个神秘常数δ作为倍数,它来源于黄金比率,以保证每一轮加密都不相同。但δ的精确值似乎并不重要,这里 TEA 把它定义为 δ=「(√5 - 1)231」(也就是程序中的 0×9E3779B9 )。
下面是作者给出的该算法的C实现:
- #define MX (z>>5^y<<2) + (y>>3^z<<4)^(sum^y) + (k[p&3^e]^z);
- long btea(long* v, long n, long* k) {
- unsigned long z=v[n-1], y=v[0], sum=0, e, DELTA=0x9e3779b9;
- long p, q ;
- if (n > 1) { /* Coding Part */
- q = 6 + 52/n;
- while (q-- > 0) {
- 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;
- }
- return 0 ;
- } else if (n < -1) { /* Decoding Part */
- n = -n;
- q = 6 + 52/n;
- sum = q*DELTA ;
- while (sum != 0) {
- 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;
- }
- return 0;
- }
- return 1;
- }
下面给出的是测试代码:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MX (z>>5^y<<2) + (y>>3^z<<4)^(sum^y) + (k[p&3^e]^z);
- long btea(long* v, long n, long* k) {
- unsigned long z=v[n-1], y=v[0], sum=0, e, DELTA=0x9e3779b9;
- long p, q ;
- if (n > 1) { /* Coding Part */
- q = 6 + 52/n;
- while (q-- > 0) {
- 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;
- }
- return 0 ;
- } else if (n < -1) { /* Decoding Part */
- n = -n;
- q = 6 + 52/n;
- sum = q*DELTA ;
- while (sum != 0) {
- 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;
- }
- return 0;
- }
- return 1;
- }
- void main() {
- long n = 10;
- long k[4] = {1,2,3,4};
- char data[1024] = "" ;
- int datalen = 0;
- char szdata[2048];
- int i = 0;
- // 控制台输入需要加密的串
- printf( "Do Encrypt. Input Data: " ) ;
- scanf( "%s", data) ;
- printf( "Data:\n %s\n", data ) ;
- btea((long*)data, n, k); // n为10,表示加密 <1>
- printf( "Encrypt Data:\n %s\n", data);
- // 转换成十六进制格式.
- datalen = strlen(data);
- for(i = 0; i < datalen; ++i)
- sprintf(&szdata[2*i], "%02X", (unsigned char)data[i]);
- szdata[2 * i] = 0;
- printf("Hex data: %s\n", szdata);
- //转换回来
- datalen = strlen(szdata);
- for(i = 0; i < datalen / 2; ++i)
- sscanf(&data[i], "%02X", &szdata[2 * i]);
- data[i] = 0;
- printf("Bin data: \n %s\n", data);
- btea((long*)data, -n, k); // n为-10,表示解密
- printf( "Decrypt Data:\n %s\n", data);
- system("pause");
- }
阅读全文
0 0
- C++ XXTEA分组加密解密算法
- C++ XXTEA加密解密算法
- TEA、XTEA、XXTEA加密解密算法
- xxtea 加密解密
- XXTea 加密/解密 字符串
- 使用xxtea加密或者解密文件
- PHP加密解密函数之Xxtea
- c算法-数字加密解密
- 基于xxtea算法文件加密工具
- PHP和Javascript的xxtea字符串加密/解密方法
- cocos2d-x 3.x学习笔记<三> 加密解密 xxtea
- cocos2dx lua XXTEA来加密解密实现详解
- XXTea加密 c++ 与 js 互相加解密
- RC加密解密算法C源代码
- RC加密解密算法C源代码
- RSA 加密算法(分组加密,分组解密)
- xxtea官方解密
- [C/C++]基础字符串的加密解密算法
- Python的dir()函数
- 下拉菜单从数据库读取数据动态生成
- 十条jQuery代码片段助力Web开发效率提升
- python数据结构之表
- python数据结构之栈
- C++ XXTEA分组加密解密算法
- IM云通信行业步入快车道,融云或将和Twilio一样实现资本上市
- Git常用命令记录
- python数据结构之队列
- 如何参与一个GitHub开源项目?
- SSH命令详解
- 用python的列表构建一棵树
- 项目中遇到使用biee12c开发
- python eve restful 规则