TEA、XTEA、XXTEA加密解密算法

参考:TEA、XTEA、XXTEA加密解密算法
地址:https://blog.csdn.net/gsls200808/article/details/48243019
其他相关博文链接:tea系列加密算法学习笔记、TEA和XxTEA跨平台加密算法

XXTEA可以直接加密解密字符串吗?
如果是字符串加密,把字符串先转成数值再加密和解密,然后再转回去。还是用其他的加密解密算法?

目录

  • TEA
    • 加密过程
    • 示例代码
  • XTEA
    • 加密过程
    • 示例代码
  • XXTEA
    • 加密过程
    • 示例代码

TEA

在密码学中,微型加密算法(Tiny Encryption Algorithm,TEA)是一种易于描述和执行的块密码,通常只需要很少的代码就可实现。其设计者是剑桥大学计算机实验室的大卫·惠勒与罗杰·尼达姆。这项技术最初于1994年提交给鲁汶的快速软件加密的研讨会上,并在该研讨会上演讲中首次发表。

在给出的代码中:加密使用的数据为2个32位无符号整数,密钥为4个32位无符号整数即密钥长度为128位

加密过程

在这里插入图片描述

算法实现:

示例代码

C语言代码(需支持C99)

#include <stdio.h>
#define uint32_t unsigned int//ubuntu下不兼容 宏替换 
//加密函数
void encrypt (uint32_t* v, uint32_t* k) {uint32_t v0=v[0], v1=v[1], sum=0, i; /* set up */uint32_t delta=0x9e3779b9; /* a key schedule constant */uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */for (i=0; i < 32; i++) { /* basic cycle start */sum += delta;v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);} /* end cycle */v[0]=v0; v[1]=v1;
}
//解密函数
void decrypt (uint32_t* v, uint32_t* k) {uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i; /* set up */uint32_t delta=0x9e3779b9; /* a key schedule constant */uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */for (i=0; i<32; i++) { /* basic cycle start */v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);sum -= delta;} /* end cycle */v[0]=v0; v[1]=v1;
}int main()
{uint32_t v[2]={1,2},k[4]={2,2,3,4};// v为要加密的数据是两个32位无符号整数// k为加密解密密钥,为4个32位无符号整数,即密钥长度为128位printf("加密前原始数据:%u %u\n",v[0],v[1]);encrypt(v, k);printf("加密后的数据:%u %u\n",v[0],v[1]);decrypt(v, k);printf("解密后的数据:%u %u\n",v[0],v[1]);

执行结果:
在这里插入图片描述

XTEA

XTEA是TEA的升级版,增加了更多的密钥表,移位和异或操作等等,设计者是Roger Needham, David Wheeler

加密过程

在这里插入图片描述
算法实现:

示例代码

#include <stdio.h>
#include <stdint.h>
#define uint32_t unsigned int//ubuntu变量类型替换/* take 64 bits of data in v[0] and v[1] and 128 bits of key[0] - key[3] */void encipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {unsigned int i;uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9;for (i=0; i < num_rounds; i++) {v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);sum += delta;v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);}v[0]=v0; v[1]=v1;
}void decipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {unsigned int i;uint32_t v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*num_rounds;for (i=0; i < num_rounds; i++) {v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);sum -= delta;v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);}v[0]=v0; v[1]=v1;
}int main()
{uint32_t v[2]={1,2};uint32_t const k[4]={2,2,3,4};unsigned int r=32;//num_rounds建议取值为32// v为要加密的数据是两个32位无符号整数// k为加密解密密钥,为4个32位无符号整数,即密钥长度为128位printf("加密前原始数据:%u %u\n",v[0],v[1]);encipher(r, v, k);printf("加密后的数据:%u %u\n",v[0],v[1]);decipher(r, v, k);printf("解密后的数据:%u %u\n",v[0],v[1]);return 0;
}

在这里插入图片描述

XXTEA

XXTEA,又称Corrected Block TEA,是XTEA的升级版 ,设计者是Roger Needham, David Wheeler

加密过程

在这里插入图片描述
算法实现:

示例代码

#include <stdio.h>
#include <stdint.h>
#define DELTA 0x9e3779b9
#define MX (((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(p&3)^e] ^ z)))
#define uint32_t unsigned intvoid 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);}
}int main()
{uint32_t v[2]= {1,2};uint32_t const k[4]= {2,2,3,4};int n= 2; //n的绝对值表示v的长度,取正表示加密,取负表示解密// v为要加密的数据是两个32位无符号整数// k为加密解密密钥,为4个32位无符号整数,即密钥长度为128位printf("加密前原始数据:%u %u\n",v[0],v[1]);btea(v, n, k);printf("加密后的数据:%u %u\n",v[0],v[1]);btea(v, -n, k);printf("解密后的数据:%u %u\n",v[0],v[1]);return 0;
}                                                                    

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WIFI 配网方式(AP模式、Smartconfig等模式)

参考&#xff1a;智能设备WIFI配网方式汇总 地址&#xff1a;https://blog.csdn.net/beauytlife_1985/article/details/87539350?spm1001.2014.3001.5502 参考&#xff1a;Wifi设备配网问题 地址&#xff1a;https://blog.csdn.net/boazheng/article/details/90906184 目录概述…

动态显示产品信息

为什么80%的码农都做不了架构师&#xff1f;>>> 今天做了个产品介绍的功能,想到只是简单的显示信息实在是无聊,那就让它动态的一个一个显示出来好了. 效果展示:http://runjs.cn/detail/topt9b26 主要的代码如下 html: info里面保存着产品的信息. <div id"c…

ALGO-162——Airport Configuration

问题描述&#xff1a;ACM机场是一个本地机场&#xff0c;对于大多数人来说&#xff0c;机场不是他们的终点或起点&#xff0c;而是中转站。机场有一个规划图。到达的大门在机场的北边&#xff08;相当于空格&#xff09;。出发的大门在机场的南边&#xff08;也相当于空格&…

CRC校验及C语言实现

摘自&#xff1a;CRC校验原理及其C语言实现 地址&#xff1a;https://blog.csdn.net/whik1194/article/details/108837493?spm1001.2014.3001.5502 什么是校验算法 最近的工作中&#xff0c;要实现对通信数据的CRC计算&#xff0c;所以花了两天的时间好好研究了一下&#xff…

技术篇(3)--QPG界面分解方法介绍

在实际开发中,我发现很多程序员花很多时间在界面处理上.并且界面之间的关系和控制逻辑可能工作量并不小.所以好些老手到后面就跑去做后台服务,做通讯去了.界面布局和交互设计本身有很多的学问,或者有很多艺术,但是本文这里先不讨论这个问题.在QPG团队实践中,我们把界面划分成很…

Linux编程MQTT实现主题发布订阅

【物联网阿里云平台开发项目实战|附课件资料】智能硬件开发-数据上云&#xff0c;零基础入门 4G模块连接阿里云教程 MQTT通信协议(mosquitto)在Linux上的环境构建与测试 MQTT通信协议(mosquitto)发布订阅例子C语言实现 MQTT客户端软件(MQTT.fx)的使用详解 各类MQTT代理服务器特…

Linux串口应用编程

目录Demo串口应用编程介绍终端Terminal串口应用编程(配置、读取、写入)struct termios 结构体配置输入模式: c_iflag输出模式: c_oflag控制模式: c_cflag(波特率、数据位、校验位、停止位)本地模式: c_lflag特殊控制字符: c_cc注意事项三种工作模式(原始模式read是否阻塞)什么时…

Linux MQTT 物联网通信

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

.NET平台下Web树形结构程序设计

.NET平台下Web树形结构程序设计 我的上篇文章《树形结构在开发中的应用》主要是在Windows Form下的实现&#xff0c;下面是Web Form下的实现。数据库设计 首先&#xff0c;我们在SQL SERVER 2000里建立一个表tbTree&#xff0c;表的结构设计如下&#xff1a;列名数据类型描述长…

Advanced Installer 9.8打包实录

原文 Advanced Installer 9.8打包实录 主要介绍&#xff1a;&#xff08;1&#xff09;创建工程&#xff0c;&#xff08;2&#xff09;创建快捷方式及其图标&#xff08;3&#xff09;卸载设置 创建工程&#xff08;.net为例&#xff09;&#xff1a; 工程创建完成。。。。接下…

CMake 入门与进阶

目录cmake简介cmake的下载cmake 的使用方法示例一&#xff1a;单个源文件(cmake生成的中间文件以及可执行文件都放在build目录下)示例二&#xff1a;多个源文件示例三&#xff1a;生成库文件(动态库和静态库、修改库文件名字、最低版本要求)示例四&#xff1a;将源文件放到不同…

Linux开发板网线直连电脑配置方法/vmware虚拟机与本机的网络ping通

目录Linux开发板网线直连电脑配置方法vmware虚拟机与本机的网络ping通Linux开发板网线直连电脑配置方法 参考&#xff1a;https://www.bilibili.com/video/BV1n541197rk?spm_id_from333.999.0.0 一般情况&#xff0c;开发板连路由器&#xff0c;电脑也连路由器&#xff0c;路由…

ubuntu网站做图像外链

http://paste.ubuntu.org.cn 转载于:https://www.cnblogs.com/yuliyang/p/3658964.html

Markdown 基础学习

Markdown是什么&#xff1f; Markdwon是一种轻量级标记语言&#xff0c;它以纯文本形式&#xff08;易读、易写、易更改&#xff09;编写文档&#xff0c;并最终以HTLM格式发布。Markdown也可以理解为将以 MARKDOWN语法编写的语言转换成HTML内容的工具。 为什么要使用Markdown?…

状态机模型

参考&#xff1a;什么是状态机&#xff1f;用C语言实现进程5状态模型 参考&#xff1a;设计模式&#xff1a;一目了然的状态机图 案例&#xff1a;状态模式(C语言实现)——MP3播放、暂停案例 STM32按键消抖——入门状态机思维&#xff08;常用的switch-case形式&#xff0c;实现…

yii开启gii功能

如果不想面对黑白界面&#xff0c;那么yii框架&#xff0c;给我们提供了一个模块gii 在配置文件中main.php 再通过访问模块的方式访问gii转载于:https://www.cnblogs.com/xiashuo-he/p/3659334.html

2、基于wsgiref模块DIY一个web框架

一 web框架 Web框架(Web framework)是一种开发框架&#xff0c;用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式&#xff0c;也为web行为提供了一套通用的方法。web框架已经实现了很多功能&#xff0c;开发人员使用框架提供的方…

C标准时间与时间戳的相互转换

什么是时间戳&#xff1f; 时间戳是指格林威治时间自1970年1月1日&#xff08;00:00:00 GTM&#xff09;至当前时间的总秒数。它也被称为Unix时间戳&#xff08;Unix Timestamp&#xff09;。时间戳是能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据&#xff0…

Linux系统信息与系统资源

目录系统信息系统标识unamesysinfo 函数gethostname 函数sysconf()函数时间、日期GMT 时间UTC 时间UTC 时间格式时区实时时钟RTC获取时间time/gettimeofday时间转换函数设置时间settimeofday总结进程时间times 函数clock 函数产生随机数休眠(延时)秒级休眠: sleep微秒级休眠: u…

简单的一个用javascript做的'省市区'三级联动效果

2019独角兽企业重金招聘Python工程师标准>>> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head><title>javascript简单三级联动效果</title…