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

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

加密过程:

算法实现:

示例代码:

C语言代码(需支持C99)

#include

#include

//加密函数

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]);

return 0;

}

执行结果:

加密前原始数据:1 2

加密后的数据:1347371722 925494771

解密后的数据:1 2

Process returned 0 (0x0) execution time : 0.020 s

Press any key to continue.

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

加密过程:

算法实现:

示例代码:

加密前原始数据:1 2

加密后的数据:1347371722 925494771

解密后的数据:1 2

Process returned 0 (0x0) execution time : 0.020 s

Press any key to continue.

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

加密过程:

算法实现:

示例代码:

[cpp] view plain copy

#include

#include

/* 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;

}

加密前原始数据:1 2

加密后的数据:1345390024 2801624574

解密后的数据:1 2

Process returned 0 (0x0) execution time : 0.034 s

Press any key to continue.

XXTEA,又称Corrected Block TEA,是XTEA的升级版

,设计者是Roger Needham, David Wheeler

加密过程:

算法实现:

示例代码:

#include

#include

#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

{

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;

}

加密前原始数据:1 2

加密后的数据:3238569099 2059193138

解密后的数据:1 2

Process returned 0 (0x0) execution time : 0.369 s

Press any key to continue.

java xxtea加密_TEA、XTEA、XXTEA加密解密算法相关推荐

  1. java加密工作模式None_java加解密算法--对称加密工作模式

    对称加密又分为分组加密和序列密码. 分组密码,也叫块加密(block cyphers),一次加密明文中的一个块.是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆 ...

  2. java aes ebc_Delphi XE2+标准AES加解密算法(AES/EBC,CBC/PKCS5Padding-base64)

    [实例简介] 实现了AES/ECB/PKCS5Padding.AES/CBC/PKCS5Padding 密钥长度128/192/256bit,密钥0填充.是标准的AES算法,支持在线AES加解密网站互 ...

  3. python 复现java中jasypt包的 PBEWITHSHA256AND256BITAES-CBC-BC加解密算法(可java python双向加解密)

    运行环境:python 3.6 依赖包Crypto的安装: pip3 install pycryptodome # Make coding more python3-ish from __future ...

  4. java写微信小程序答辩问题_java微信小程序开发中加密解密算法总结

    详解java微信小程序开发中加密解密算法 一.概述 微信推出了小程序,很多公司的客户端应用不仅具有了APP.H5.还接入了小程序开发.但是,小程序中竟然没有提供Java版本的加密数据解密算法.这着实让 ...

  5. 国密SM9算法C++实现之七:加密解密算法

    SM9算法C++实现系列目录: 基于JPBC的SM9算法的java实现与测试 国密SM9算法C++实现之0:源码下载地址 国密SM9算法C++实现之一:算法简介 国密SM9算法C++实现之二:测试工具 ...

  6. 安全系列(二)-银行加密体系与加解密算法速览

    一.银行3级加密体系说明: 转:加密体系介绍(LMK.ZMK.ZAK.ZPK)_炎升的博客-CSDN博客_lmk密钥 二.加解密算法 1.分类说明 其中按国际和国内使用主要分为:通用算法和国密. 通用 ...

  7. c 语言简单字符加密,C字符串简易加密解密算法

    一. 问题描述 对一个指定的字符串进行加密之后,利用解密函数能后对密文解密显示明文信息,这里定义加密的规则:是将字符串中每个字符加上它在字符串中的位置和一个偏移值.例如:将字符串"mrsof ...

  8. TEA、XTEA、XXTEA加密解密算法

    参考:TEA.XTEA.XXTEA加密解密算法 地址:https://blog.csdn.net/gsls200808/article/details/48243019 其他相关博文链接:tea系列加 ...

  9. TEA、XTEA、XXTEA加密解密算法(C语言实现)

    ref : https://blog.csdn.net/gsls200808/article/details/48243019 在密码学中,微型加密算法(Tiny Encryption Algorit ...

最新文章

  1. [置顶] 单例模式lua实现
  2. Object-C 有私有变量?私有方法?
  3. 解压与压缩(把dataset转为string、、 )
  4. python中是干嘛的-学 Python 都用来干嘛的?
  5. ERP customizing extraction - how extraction function module is determined
  6. scrapy爬虫框架windows下的安装问题
  7. go web db每次关闭_竟然不用写代码!一款可视化 Web 管理后台生成工具
  8. openvswitch patch port使用方法
  9. 四张照片合成一张怎么弄_我在朋友圈发了这张照片后,所有人都求问教程
  10. HTML5手机游戏将迎美好未来 .
  11. 【离散数学·图论】关于哈密顿图的判别条件总结
  12. 各大网站收录、搜索引擎的提交入口
  13. Android初学者的疑惑与“死板”的Android初学之路
  14. 锂离子电池的仿真模拟
  15. 在 dart fluter 中使用 typedef
  16. [散文]芒果女人(作者:毕淑敏)
  17. 1053 Path of Equal Weight (30分)
  18. 客户端连接云服务总是自动断开连接解决办法
  19. 丽水数据可视化设计价格_大数据可视化项目报价模板
  20. Kindle在线推书网站 强烈推荐

热门文章

  1. 渐开线齿轮齿形误差和齿向误差
  2. 南昌大学计算机调剂难吗,南昌大学计算机应用技术专业调剂生复试经验(2)
  3. [转载] 信息系统项目管理师视频教程——25 战略管理
  4. Linux性能调优的优化思路
  5. postgre数据库优缺点
  6. iOS中使用ZipArchive 压缩和解压缩文件
  7. 程序员求职攻略(《程序员面试笔试宝典》)之自己的强项或是研究方向与中意的工作岗位不一致怎么办?...
  8. 油猴(Tampermonkey)简介及使用教程
  9. 计算机应用研究》专业刊物论文,《计算机应用研究》CSCD核心期刊 2017年03期目录...
  10. win8.1软件打不开