我对如何使用计数器模式在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:未绑定的方法incrIV()必须以IVCounter实例作为第一个参数来调用(取而代之的是str实例)


无论我尝试什么,我都无法正常工作。有人可以帮我弄清楚吗?

谢谢!

最佳答案

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


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

关于python - Pycrypto:递增AES计数器模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11642337/

10-12 19:32