我是靠谱客的博主 狂野中心,这篇文章主要介绍(加密基础)TEA篇,现在分享给大家,希望可以做个参考。

TEA算法

1.简介

TEA算法全称微型加密算法(Tiny Encryption Algorithm)是一种简单容易实现的加密算法,通常只需要很少的代码就可以实现

2.加密过程

在加密过程中,需要使用2个32位的无符号整数,密钥为128位,四个32位无符号整数

流程图

加密中一共有五个量参与运算,l(第一个明文),r(第二个明文),sum=0,delta给定一个定值,密钥key每一轮:

复制代码
1
2
3
4
sum+=delta; l += ((r << 4) + key[0]) ^ (r + sum) ^ ((r >> 5) + key[1]); r += ((l << 4) + key[2]) ^ (l + sum) ^ ((l >> 5) + key[3]);

一共执行32次,最后将l,r放入v[0],v[1]中存储,得到密文

复制代码
1
2
3
4
5
6
7
8
9
10
11
void encrypt(unsigned int* v, unsigned int* key) { unsigned int l = v[0], r = v[1], sum = 0, delta = 0x9e3779b9; for (size_t i = 0; i < 32; i++) { sum += delta; l += ((r << 4) + key[0]) ^ (r + sum) ^ ((r >> 5) + key[1]); r += ((l << 4) + key[2]) ^ (l + sum) ^ ((l >> 5) + key[3]); } v[0] = l; v[1] = r; }

解密流程跟加密相反

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
void decrypt(unsigned int* v, unsigned int* key) { unsigned int l = v[0], r = v[1], sum = 0, delta = 0x9e3779b9; sum = delta * 32; for (size_t i = 0; i < 32; i++) { r -= ((l << 4) + key[2]) ^ (l + sum) ^ ((l >> 5) + key[3]); l -= ((r << 4) + key[0]) ^ (r + sum) ^ ((r >> 5) + key[1]); sum -= delta; } v[0] = l; v[1] = r; }

XTEA算法

跟TEA算法很类似,差别就是将r的变化结果和l变化结果进行了交替赋值,同时位移次数进行了一些变化,也掺杂了一些与操作

复制代码
1
2
3
4
5
6
7
8
9
10
11
void encrypt(unsigned int* v, unsigned int* key) { unsigned int l = v[0], r = v[1], sum = 0, delta = 0x9e3779b9; for (size_t i = 0; i < 32; i++) { l += (((r << 4) ^ (r >> 5)) + r) ^ (sum + key[sum & 3]); sum += delta; r += (((l << 4) ^ (l >> 5)) + l) ^ (sum + key[(sum >> 11) & 3]); } v[0] = l; v[1] = r; }

解密:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
void decrypt(unsigned int* v, unsigned int* key) { unsigned int l = v[0], r = v[1], sum = 0, delta = 0x9e3779b9; sum = delta * 32; for (size_t i = 0; i < 32; i++) { r -= (((l << 4) ^ (l >> 5)) + l) ^ (sum + key[(sum >> 11) & 3]); sum -= delta; l -= (((r << 4) ^ (r >> 5)) + r) ^ (sum + key[sum & 3]); } v[0] = l; v[1] = r; }

XXTEA算法

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdbool.h> #include <stdio.h> #define MX ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z)) bool btea(unsigned int* v, int n, unsigned int* k) { unsigned int z = v[n - 1], y = v[0], sum = 0, e, DELTA = 0x9e3779b9; unsigned int 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; } int main(int argc, char const* argv[]) { // test unsigned int v[2] = {1, 2}, key[4] = {1, 2, 3, 4}; printf("%u,%un", v[0], v[1]); btea(v, 2, key); printf("%u,%un", v[0], v[1]); btea(v, -2, key); printf("%u,%un", v[0], v[1]); return 0; }

TXTEA

和TEA算法的唯一区别就是仅使用了16轮加密,还有就是使用了魔改的CBC模式

TXCBC模式:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdint.h> 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 < 16; 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], i; /* set up */ uint32_t delta=0x9e3779b9; /* a key schedule constant */ uint32_t sum = delta << 4; uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3]; /* cache key */ for (i=0; i<16; 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; }

参考链接:

https://bbs.pediy.com/thread-253844.htm

最后

以上就是狂野中心最近收集整理的关于(加密基础)TEA篇的全部内容,更多相关(加密基础)TEA篇内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(95)

评论列表共有 0 条评论

立即
投稿
返回
顶部