Python实现TEA、XTEA、XXTEA加密解密算法

您所在的位置:网站首页 tea加解密工具 Python实现TEA、XTEA、XXTEA加密解密算法

Python实现TEA、XTEA、XXTEA加密解密算法

2024-02-04 22:02| 来源: 网络整理| 查看: 265

闲来无事,喝杯茶冷静一下。

TEA

微型加密算法(Tiny Encryption Algorithm,TEA)是一种易于描述和执行的块密码,通常只需要很少的代码就可实现。TEA 操作处理在两个 32 位无符号整型上(可能源于一个 64 位数据),并且使用一个 128 位的密钥。设计者是 Roger Needham 和 David Wheeler。

加密过程:

Python 实现:

#!/usr/bin/env python def encrypt(v, k): v0 = v[0] v1 = v[1] x = 0 delta = 0x9E3779B9 k0 = k[0] k1 = k[1] k2 = k[2] k3 = k[3] for i in range(32): x += delta x = x & 0xFFFFFFFF v0 += ((v1 > 5) + k1) v0 = v0 & 0xFFFFFFFF v1 += ((v0 > 5) + k3) v1 = v1 & 0xFFFFFFFF v[0] = v0 v[1] = v1 return v def decrypt(v, k): v0 = v[0] v1 = v[1] x = 0xC6EF3720 delta = 0x9E3779B9 k0 = k[0] k1 = k[1] k2 = k[2] k3 = k[3] for i in range(32): v1 -= ((v0 > 5) + k3) v1 = v1 & 0xFFFFFFFF v0 -= ((v1 > 5) + k1) v0 = v0 & 0xFFFFFFFF x -= delta x = x & 0xFFFFFFFF v[0] = v0 v[1] = v1 return v if __name__ == '__main__': plain = [1, 2] key = [2, 2, 3, 4] encrypted = encrypt(plain, key) print encrypted decrypted = decrypt(encrypted, key) print decrypted XTEA

XTEA 是 TEA 的升级版,增加了更多的密钥表,移位和异或操作等等。

加密过程:

Python 实现:

#!/usr/bin/env python def encrypt(rounds, v, k): v0 = v[0] v1 = v[1] x = 0 delta = 0x9E3779B9 for i in range(rounds): v0 += (((v1 > 5)) + v1) ^ (x + k[x & 3]) v0 = v0 & 0xFFFFFFFF x += delta x = x & 0xFFFFFFFF v1 += (((v0 > 5)) + v0) ^ (x + k[(x >> 11) & 3]) v1 = v1 & 0xFFFFFFFF v[0] = v0 v[1] = v1 return v def decrypt(rounds, v, k): v0 = v[0] v1 = v[1] delta = 0x9E3779B9 x = delta * rounds for i in range(rounds): v1 -= (((v0 > 5)) + v0) ^ (x + k[(x >> 11) & 3]) v1 = v1 & 0xFFFFFFFF x -= delta x = x & 0xFFFFFFFF v0 -= (((v1 > 5)) + v1) ^ (x + k[x & 3]) v0 = v0 & 0xFFFFFFFF v[0] = v0 v[1] = v1 return v if __name__ == '__main__': plain = [1, 2] key = [2, 2, 3, 4] rounds = 32 encrypted = encrypt(rounds, plain, key) print encrypted decrypted = decrypt(rounds, encrypted, key) print decrypted XXTEA

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

加密过程:

Python 实现:

#!/usr/bin/env python def shift(z, y, x, k, p, e): return ((((z >> 5) ^ (y > 3) ^ (z > 2) & 3 for p in range(n - 1): y = v[p + 1] v[p] = (v[p] + shift(z, y, x, k, p, e)) & 0xFFFFFFFF z = v[p] p += 1 y = v[0] v[n - 1] = (v[n - 1] + shift(z, y, x, k, p, e)) & 0xFFFFFFFF z = v[n - 1] return v def decrypt(v, k): delta = 0x9E3779B9 n = len(v) rounds = 6 + 52 / n x = (rounds * delta) & 0xFFFFFFFF y = v[0] for i in range(rounds): e = (x >> 2) & 3 for p in range(n - 1, 0, -1): z = v[p - 1] v[p] = (v[p] - shift(z, y, x, k, p, e)) & 0xFFFFFFFF y = v[p] p -= 1 z = v[n - 1] v[0] = (v[0] - shift(z, y, x, k, p, e)) & 0xFFFFFFFF y = v[0] x = (x - delta) & 0xFFFFFFFF return v if __name__ == '__main__': plain = [1, 2] key = [2, 2, 3, 4] encrypted = encrypt(plain, key) print encrypted decrypted = decrypt(encrypted, key) print decrypted References

https://blog.csdn.net/gsls200808/article/details/48243019

python crypto

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

C语言实现RC2、RC5、RC6加密解密算法 从零开始认识跨站请求伪造


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3