TEA系列算法

TEA

分组加密算法,明文以8字节一组,密钥以16字节一组( (明文以8字节分组最后一组不够时填充)

密钥分为四个子密钥进行加密解密

加密过程

delta = 0x9e3779b9
for i in range(32): # 加密轮数(一般是32轮)
	sum += delta
	l += ((r<<4)+k0)^(r+sum)^((r>>5)+k1)
	r += ((l<<4)+k2)^(l+sum)^((l>>5)+k3)
v[0] = l
v[1] = r

解密过程

for i in range(32): # 对应加密的轮数
	v1 -= ((v0<<4)+k2)^(v0+sum)^(v0>>5)+k3)
	v0 -= ((v1<<4)+k0)^(v1+sum)^(v1>>5)+k1)
	sum -= delta
v[0] = v0
v[1] = v1

除了TEA算法还有XTEA(tean),XXTEA算法,统称为TEA系列;

该系列的特征是delta = 0x9e3779b9

由于是分组密码,一般CTF的Crypto方向一般不会有(网上能搜到的TEA系列代码实现几乎都是C语言,这就意味着一般是作为RE方向考察的)

系列代码实现几乎都是C语言,这就意味着一般是作为RE方向考察的)

TEA算法是一种对称加密算法,它的加密和解密过程是相同的。TEA算法的加密过程如下: 1. 将明文分成两个32位的块L0和R0。 2. 将L0和R0分别与密钥的前两个32位进行异或运算,得到L1和R1。 3. 将L1和R1分别与密钥的第三个和第四个32位进行异或运算,得到L2和R2。 4. 重复上述步骤,直到得到L16和R16。 5. 将L16和R16合并成一个64位的块,即为密文。 TEA算法解密过程与加密过程类似,只是将密钥的顺序颠倒,即先用密钥的最后两个32位进行异或运算,然后再用前两个32位进行异或运算,最终得到明文。 TEA算法的改进版本有XTEA、XXTEA和BLOCK TEA等,它们的加密过程类似,只是轮数和密钥长度有所不同。 下面是TEA算法的Python实现代码: ```python def encrypt_tea(v, k): delta = 0x9e3779b9 sum = 0 k = [k[i:i+4] for i in range(0, len(k), 4)] v = [v[i:i+4] for i in range(0, len(v), 4)] for i in range(32): sum += delta v0 = v[0] v1 = v[1] v[0] += ((v[1] << 4) + int(k[i%4])) ^ (v[1] + sum) ^ ((v[1] >> 5) + int(k[(i+1)%4])) v[1] += ((v[0] << 4) + int(k[(i+2)%4])) ^ (v[0] + sum) ^ ((v[0] >> 5) + int(k[(i+3)%4])) return b''.join(v) def decrypt_tea(v, k): delta = 0x9e3779b9 sum = delta * 32 k = [k[i:i+4] for i in range(0, len(k), 4)] v = [v[i:i+4] for i in range(0, len(v), 4)] for i in range(32): v1 = v[1] v0 = v[0] v[1] -= ((v[0] << 4) + int(k[(i+2)%4])) ^ (v[0] + sum) ^ ((v[0] >> 5) + int(k[(i+3)%4])) v[0] -= ((v[1] << 4) + int(k[i%4])) ^ (v[1] + sum) ^ ((v[1] >> 5) + int(k[(i+1)%4])) sum -= delta return b''.join(v) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M3ng@L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值