使用欧洲央行功能的CBC解密



试图求解密码挑战10,必须在所有ASCII 0( x00 x00 x00 x00& c)的IV上对"黄色潜艇"进行CBC的文本文件。链接到文本文件如下:

http://cryptopals.com/static/challenge-data/10.txt

我遵循了CBC算法CBC的使用,通过取代文本,解密(使用ECB解密),然后将XOR与初始化矢量一起用于第一块和Ciphertext(I-1)以进行后续块。但是,由于某些不可理解的原因,我没有得到可读的解密。解密后我只看到一些怪异的字符:

from Crypto.Cipher import AES
key ='YELLOW SUBMARINE'
iv = "%00%00%00"*32
iv = iv.replace('%',r'x')
#XOR-ing function
def xor_strings(a, b):
    return "".join(chr(ord(a1) ^ ord(b1)) for a1, b1 in zip(a, b))
#Taking input file and converting it into a single string 
file = open('10.txt','r')
data = file.read()
block = 128
obj = AES.new(key, AES.MODE_ECB)
def split_len(string, size):
    return [string[i:i+size] for i in range(0, len(string), size)]
mylist = split_len(data,block)

decrypted = ""
for i in range (0,len(mylist)):
     mystr = obj.decrypt(mylist[i])
     if (i==0):
          decrypted = decrypted + xor_strings(mystr,iv)
     else:
          decrypted = decrypted + xor_strings(mystr, mylist[i-1])
 print decrypted

这里可能是什么问题?

iv需要为16个零字节(当它说" ascii 0"时,这个问题在这里措辞并未清楚地措辞):

iv = "x00" * 16

您需要在解密文件之前对文件进行解码:

from base64 import b64decode
#...
file = open('10.txt','r')
data = file.read()
data = b64decode(data)

最后,您的块大小需要在字节中才能使此代码工作,而不是位:

block = 16

相关内容

  • 没有找到相关文章

最新更新