TEA 算法的 Python 实现

stackoverflow 上面有人问 TEA 加解密的 Python 实现算法。问题中的那段代码计算出的结果为什么与 C 语言不一样呢?因为直接对 Python 里面的数字左移的时候,如果结果超出了 32 位,Python 并不会像 C 语言那样把超出 32 位的部分截取,而是从 int 成为了一个 long 数据。比如,0xFFFFFFFF << 8 在 C 语言中的结果是 0xFFFFFF00,而 Python 的结果是 0xFFFFFFFF00。

所以,在 Python 中要实现 C 语言中的结果,只需要把结果限定在 32 位(或其他需要的位数)即可。比较方便的方法是使用 ctypes 中的数据类型 c_uint32、c_int32 等。完整的加密代码如下:

def encipher(v, k):
    y = c_int32(v[0])
    z = c_int32(v[1])
    sum = c_int32(0)
    delta = 0x61c88647
    n = 16
    w = [0, 0]

    while n > 0:
        y.value += z.value << 4 ^ z.value >> 5 + sum.value ^ z.value + k[sum.value & 3]
        sum.value -= delta
        z.value += y.value << 4 ^ y.value >> 5 + sum.value ^ y.value + k[sum.value >> 11 & 3]
        n -= 1
    
    w[0]=y.value
    w[1]=z.value
    return w



猜你喜欢

转载自blog.csdn.net/kowity/article/details/7443113
今日推荐