我有一个 64 个字符的字符串。前 32 个字符代表 IV,后 32 个字符是加密消息。每个字符代表 4 位,因此我必须成对解释字符串以获得单个字节。
我想做的是复制反模式解密的工作原理。据我了解这个过程,我应该能够将我的密文与我的 IV 加密进行异或,这应该会产生纯文本。(请注意,我的密文 = 16 字节 = 一个块,所以我相信这里不需要填充或增加 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