1

我有一个 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
4

1 回答 1

2

答案确实很简单:不要加密 IV。IV 应以明文形式发送。

于 2012-07-28T23:52:59.617 回答