まだこれを機能させることはできません。私の質問は、復号化ラインを機能させる方法についてです。ここに私が書いたものがあります:
class IVCounter(object):
@staticmethod
def incrIV(self):
temp = hex(int(self, 16)+1)[2:34]
return array.array('B', temp.decode("hex")).tostring()
def decryptCTR(key, ciphertext):
iv = ciphertext[:32] #extracts the first 32 characters of the ciphertext
#convert the key into a 16 byte string
key = array.array('B', key.decode("hex")).tostring()
print AES.new(key, AES.MODE_CTR, counter=IVCounter.incrIV(iv)).decrypt(ciphertext)
return
私のエラーメッセージは次のとおりです。
ValueError: 'counter' パラメータは呼び出し可能なオブジェクトでなければなりません
pycrypto がその 3 番目の引数を new に整理する方法がわかりません。
誰でも助けることができますか?ありがとう!
以下の提案を実装した後の新しいコードを編集します。まだ立ち往生!
class IVCounter(object):
def __init__(self, start=1L):
print start #outputs the number 1 (not my IV as hoped)
self.value = long(start)
def __call__(self):
print self.value #outputs 1 - need this to be my iv in long int form
print self.value + 1L #outputs 2
self.value += 1L
return somehow_convert_this_to_a_bitstring(self.value) #to be written
def decryptCTR(key, ciphertext):
iv = ciphertext[:32] #extracts the first 32 characters of the ciphertext
iv = int(iv, 16)
#convert the key into a 16 byte string
key = array.array('B', key.decode("hex")).tostring()
ctr = IVCounter()
Crypto.Util.Counter.new(128, initial_value = iv)
print AES.new(key, AES.MODE_CTR, counter=ctr).decrypt(ciphertext)
return
EDIT STILL はこれを機能させることができません。非常にイライラし、完全にアイデアがありません。これが最新のコードです: (私の入力文字列は 32 ビットの 16 進文字列であり、長い整数に変換するには 2 桁のペアで解釈する必要があることに注意してください。)
class IVCounter(object):
def __init__(self, start=1L):
self.value = long(start)
def __call__(self):
self.value += 1L
return hex(self.value)[2:34]
def decryptCTR(key, ciphertext):
iv = ciphertext[:32] #extracts the first 32 characters of the ciphertext
iv = array.array('B', iv.decode("hex")).tostring()
ciphertext = ciphertext[32:]
#convert the key into a 16 byte string
key = array.array('B', key.decode("hex")).tostring()
#ctr = IVCounter(long(iv))
ctr = Crypto.Util.Counter.new(16, iv)
print AES.new(key, AES.MODE_CTR, counter=ctr).decrypt(ciphertext)
return
TypeError: CTR カウンター関数が長さ 16 以外の文字列を返しました