Pycrypto:增加AES计数器模式

时间:2012-07-25 03:38:30

标签: python aes pycrypto

我真的很困惑如何使用计数器模式在pycrypto中进行AES解密。据我了解这个过程,如果我从一个已知的IV开始解密第一个块,那么对于每个连续的块,我必须增加IV。但我不明白该怎么做。

另外,我对python完全不熟悉,你很容易看到。我的问题在于我如何实现我的类以及我如何从解密器调用它。

这是我到目前为止编写的代码:

class IVCounter(object):
    def incrIV(self):
        return self[:15] + chr(ord(self[15:]) + 1)

def decryptCTR(key, ciphertext):

    #convert the key into a 16 byte string
    key = array.array('B', key.decode("hex")).tostring()

    #convert the iv into a 16 byte string
    iv = array.array('B', iv.decode("hex")).tostring()

    print AES.new(key, mode, counter=IVCounter.incrIV(iv)).decrypt(ciphertext)
    return

这是我得到的错误:

  

TypeError:必须使用IVCounter实例作为第一个参数调用未绑定方法in​​crIV()(改为使用str实例)

无论我尝试什么,我都无法让它发挥作用。有人可以帮我理顺吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

class IVCounter(object):
    @staticmethod
    def incrIV(arry):
        return arry[:15] + chr(ord(arry[15:]) + 1)

它抱怨,因为它期望第一个参数是一个实例。使用staticmethod装饰器将其关闭。