1,QQ基于腾讯自己的xxtea算法加密手段,咱就先尝试使用一下xxtea算法,网上找了一些版本,也使用了一些现有的版本,数据都可以正常使用,瞅瞅就好

2,tea加密的秘钥是四组,总长度是16个字节,可以选择直接定义4组4字节长度的秘钥,也可以和我一样,用unsigned char定义之后,再传入的时候强转一下就行。

3,代码里面给的两种方式其实差不多一样,毕竟这个算法本身也没几行代码,写不出个花来,一个是在内部根据传入的参数判断是进行加密还是解密操作,一个是直接确定解密的时候用解密函数,加密的时候用加密函数,至于如果需要加密的数据长度不足如何填充,这个暂时还没学习了解。

4,代码就是下面的代码,各位大哥大姐如有想法,可以交流交流。

#include"pch.h"
#include<stdio.h>
#include<stdint.h>
#define DELTA 0x9E3779B9
#define MX (((z>>5^y<<2)+(y>>3^z<<4))^((sum^y)+(k[(p&3)^e]^z)))
void btea(uint32_t *v, int n, uint32_t const k[4])
{uint32_t y, z, sum;unsigned p, rounds, e;if (n > 1){rounds = 6 + 52 / n;  //这里可以说是预定义值,n=2是rounds=32sum = 0;z = v[n - 1];do{sum += DELTA;e = (sum >> 2) & 3;for (p = 0; p < n - 1; p++)        //注意这里的p是从0~n-1{y = v[p + 1];z = v[p] += MX;}y = v[0];z = v[n - 1] += MX;        //这里的MX中传入的p=n-1} while (--rounds);}else if (n < -1){n = -n;rounds = 6 + 52 / n;sum = rounds * DELTA;y = v[0];do{e = (sum >> 2) & 3;for (p = n - 1; p > 0; p--)    //注意这里的p是从n-1~0,和上面是反过来的{z = v[p - 1];y = v[p] -= MX;}z = v[n - 1];y = v[0] -= MX;    //这里的MX中传入的 p=0sum -= DELTA;} while (--rounds);}
}
void xxteaencrypt(uint32_t*v, uint32_t len, uint32_t*k) {uint32_t n = len - 1;uint32_t z = v[n], y = v[0], p, q = 6 + 52 / (n + 1), sum = 0, e;if (n < 1) {return;}while (0 < q--) {sum += DELTA;e = sum >> 2 & 3;for (p = 0; p < n; p++) {y = v[p + 1];z = v[p] += MX;}y = v[0];z = v[n] += MX;}
}void xxteadecrypt(uint32_t*v, uint32_t len, uint32_t*k) {if (len == 0)return;uint32_t n = len - 1;uint32_t z = v[n], y = v[0], p, q = 6 + 52 / (n + 1), sum = q * DELTA, e;if (n < 1) {return;}while (sum != 0) {e = sum >> 2 & 3;for (p = n; p > 0; p--) {z = v[p - 1];y = v[p] -= MX;}z = v[n];y = v[0] -= MX;sum -= DELTA;}
}
int main()
{unsigned char v[] = { 0x63,0x68,0x75,0x61,0x6E,0x67,0x71,0x69,0x61,0x6E,0x6D,0x69,0x6E,0x67,0x79,0x75,0x65,0x67,0x75,0x61,0x6E,0x67,0x31,0x31,0x31,0x31,0x31,0x68,0x61,0x68,0x61,0x61 };//需要加密或者解密的数据unsigned char k[] = { 0x98, 0xff, 0x34, 0x8c, 0x0c, 0x9d,0xac, 0x6e, 0xc9, 0x86, 0xd3, 0x90, 0xdc, 0x22,0xc4, 0xb3 };//秘钥int n = (sizeof(v) / sizeof(char)) / 4;xxteaencrypt((uint32_t*)v, n, (uint32_t*)k);//可以顺利加密xxteadecrypt((uint32_t*)v, n, (uint32_t*)k);//可以顺利解密printf("测试第二种");btea((uint32_t*)v, n, (uint32_t*)k);//可以顺利加密,n为正,加密,n为负,解密btea((uint32_t*)v, -n, (uint32_t*)k);//可以顺利解密return 0;
}

XXTEA算法使用C语言实现相关推荐

  1. 十种经典排序算法精粹(c语言版本)

    下面给出这段时间我苦心研究验证过的十种经典排序算法的C语言版本,即下面的排序算法: 插入排序,shell排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,桶排序,基数排序和计数排序.整理出来以作备 ...

  2. 迪杰斯特拉算法(C语言实现)

    迪杰斯特拉算法(C语言实现) 如上图,求以a为源点到个顶点的最短路劲. #include "stdio.h" #include "stdlib.h" //用一个 ...

  3. 【每日算法】C语言8大经典排序算法(2)

    接上文--->[每日算法]C语言8大经典排序算法(1) 二.插入类排序 插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中 ...

  4. python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

    数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...

  5. c代码实现 ifft运算_fft算法c语言_matlab fft算法_ifft c语言

    FFT快速算法C程序_工学_高等教育_教育专区.电子信息工程综合课程设计报告书 DSP 课程设计 报告 题学 目: 院: FFT 快速算法 C 程序 计算机与信息工程学院 09 ... fft算法代码 ...

  6. 用c语言实现蚂蚁算法,rsa算法的c语言实现

    rsa算法的c语言实现 RSA 算法的 C 语言实现一.RSA 算法的描述 1.选取长度相等的两个大素数 p 和 q,计算其乘积: n=pq 然后随机选取加密密钥 e,使 e 和 (p–1)(q–1) ...

  7. 四阶龙格库塔c语言,四阶龙格库塔算法的C语言实现

    解微分方程 2001年3月焦作大学学报 JOURNALOFJIAOZUOUNIVERSITY№ 1Mar.2001第1期 四阶龙格一库塔算法的C语言实现 毋玉芝 (焦作财会学校) 摘要本文叙述了四阶龙 ...

  8. c语言程序位置式pid算法,位置式PID算法的C语言代码

    描述 位置式PID的C语言写法详解 PID调节口诀: 参数整定找最佳,从小到大顺序查 先是比例后积分,最后再把微分加 曲线振荡很频繁,比例度盘要放大 曲线漂浮绕大湾,比例度盘往小扳 曲线偏离回复慢,积 ...

  9. Dijkstra算法的C语言程序

    Dijkstra算法用来寻找图的结点间最短路径,通常是指定一个起始结点后,寻找从该结点出发,到达各个结点的最短路径.该算法是有关最短路径问题的一个算法.由Dijkstra于1959年提出. 百度百科: ...

最新文章

  1. leetcode--笔记——120. 三角形最小路径和
  2. C++ Primer 5th笔记(6)chapter6 函数: 调试帮助
  3. s4-介质访问控制子层-1 MAC子层
  4. maven nexus 私服的搭建学习
  5. Linux云服务器安装JDK1.8
  6. Java游戏有易筋经_易筋经- JavaWeb-1
  7. jq之slidedown()
  8. 2021垂直类电商私域化洞察报告
  9. 什么才算是“真正的”编程能力?不提升这些能力,你何时能拿高薪!
  10. 递归函数合式分解python_python(22)- 递归和函数式编程
  11. 苹果,把充电器还给我们!京沪法学生状告苹果公司欺诈
  12. spring核心:bean工厂的装配 2
  13. 如何在NEO区块链上实现信息加密
  14. (第二部)程序员逆天改命之胜天半子
  15. 十大最值得逛的上海马路~~(完整版)
  16. 十大门店进销存管理系统软件测评,秦丝长年稳居榜首
  17. 思科路由器NAT配置案例(static tcp)
  18. uniapp:H5页面长按识别二维码
  19. Java生成安全随机密码
  20. 冯诺依曼计算机硬件系统,冯·诺依曼型计算机硬件组成

热门文章

  1. Wince系统设置开机启动方式--注册表方式
  2. 关于ch340驱动安装
  3. Web前端_如何清除微信内置浏览器的缓存
  4. 如何使用slick插件(响应式轮播插件)
  5. JSONViewer下载路径
  6. [资源分享]一个类似LOL的UNITY分享
  7. 3D图形学(5):BRDF经验模型和基于物理的BRDF模型
  8. 教师职称考计算机模块,2015年教师职称计算机考试模块
  9. UVA 516 Prime Land
  10. 正则表达式中/g /i /m /e /x /s的用法