代码实现与示例
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
参数描述:
DELTA: 神秘常数δ,它来源于黄金比率,以保证每一轮加密都不相同。但δ的精确值似乎并不重要,这里 TEA 把它定义为 δ=「(√5 - 1)231」
v: 需要加解密的数据,格式为32位的无符号整数组成的数组
n: n表示需要加密的32位无符号整数的个数(例:n为1时,只有v数组中的第一个元素被加密了),n不能大于v的长度
k: 密钥,格式为4个32位无符号整数组成的数组,即密钥长度为128位
"""
import struct
from ctypes import c_uint32
DELTA = 0x9E3779B9
def encrypt(v, n, k):
rounds = 6 + int(52 / n)
sum = c_uint32(0)
z = v[n - 1].value
while rounds > 0:
sum.value += DELTA
e = (sum.value >> 2) & 3
p = 0
while p < n - 1:
y = v[p + 1].value
v[p].value += (((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4)) ^ ((sum.value ^ y) + (k[(p & 3) ^ e] ^ z)))
z