我有一个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
答案 0 :(得分:2)
答案很简单:不加密IV。 IV应该以明文形式发送。