私は64文字の文字列を持っています。最初の 32 文字は IV を表し、最後の 32 文字は暗号化されたメッセージです。各文字は 4 ビットを表すため、文字列をペアで解釈して 1 バイトを取得する必要があります。
私がやろうとしているのは、カウンターモードの復号化がどのように機能するかを再現することです. プロセスを理解しているので、IV の暗号化に対して暗号文を xor できるはずであり、これにより平文が得られるはずです。(私の暗号テキスト = 16 バイト = 1 ブロックなので、ここでは IV のパディングやインクリメントは必要ないことに注意してください。)
これをどのように行っても、読みやすい出力が得られません。私の問題は、IV を暗号化する方法だと思いますが、よくわかりません。私はこれを永遠に攻撃してきましたが、どこにも行きません。誰かが私が間違っていることを見ることができますか? 私が書いたコードは次のとおりです。
def decryptCTR(key, ciphertext):
IV = ciphertext[:32]
C0 = ciphertext[32:64]
#convert into 16 byte strings
key = array.array('B', key.decode("hex")).tostring()
IV = array.array('B', IV.decode("hex")).tostring()
# ENCRYPT iv with the key
encodeAES = lambda c, s: base64.b64encode(c.encrypt(s))
cipher = AES.new(key, AES.MODE_CFB)
encryptedIV = encodeAES(cipher, IV)
#xor the encrypted iv with the ciphertext block
print "XOR: " + strXOR(encryptedIV, C0)
return