我对如何使用计数器模式在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/