1

カウンターモードを使用して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 インスタンスを取得)

何を試しても、これを機能させることはできません。誰かが私をまっすぐにするのを手伝ってくれますか?

ありがとう!

4

1 に答える 1

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

最初の引数がインスタンスであると想定しているため、不平を言っています。staticmethodデコレータでそれをオフにします。

于 2012-07-25T05:31:17.960 に答える