关于Cryptopals 的challenge17 set3

问题遇到的现象和发生背景

不太清楚该咋搞
链接:https://blog.csdn.net/yalecaltech/article/details/108655096?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7EHighlightScore-4.queryctrv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7EHighlightScore-4.queryctrv2&utm_relevant_index=8

我的解答思路和尝试过的方法

虽然在网上看到了一个脚本,但运行起来却发现报错
代码:

from base64 import b64decode
from random import randint
from Crypto.Cipher.AES import block_size,key_size
from Crypto import Random
from S2C1 import judging, unpad
from S2C2 import CBC_decrypt, CBC_encrypt


class Oracle:
    def __init__(self,possible_input):
        self.iv=Random.new().read(block_size)
        self.key=Random.new().read(key_size[0])
        self.possible_input=possible_input
    def get_cipher(self):
        chosen_input=self.possible_input[randint(0,9)].encode()
        return CBC_encrypt(chosen_input,self.key,self.iv)
    def decrypt_and_check_padding(self,cipher,iv):
        plain=CBC_decrypt(cipher,self.key,iv)
        return judging(plain)

def get_padding(iv,guessed_byte,padding_len,found_plain):
    index_padding=len(iv)-padding_len
    padding=iv[index_padding]^guessed_byte^padding_len
    output=iv[:index_padding]+bytes([padding])
    m=0
    for i in range(block_size-padding_len+1,block_size):
        padding=iv[i]^found_plain[m]^padding_len
        output+=bytes([padding])
        m+=1
    return output

def attack_padding(cipher,oracle):
    plain=b''
    cipher_block=[oracle.iv]+[cipher[i:i+block_size] for i in range(0,len(cipher),block_size)]
    for c in range(1,len(cipher_block)):
        plain_block=b''
        for i in range(block_size-1,-1,-1):
            padding_len=len(cipher_block)+1
            possible_byte=[]
            for j in range(256):
                test_iv1=get_padding(cipher_block[c-1],j,padding_len,plain_block)
                if(oracle.decrypt_and_check_padding(cipher_block[i],test_iv1) is True):
                    possible_byte+=bytes(j)
            if(len(possible_byte)!=1):
                for byte in possible_byte:
                    for j in range(256):
                        text_iv=get_padding(cipher_block[c-1],j,padding_len+1,bytes(byte)+plain_block)
                        if(oracle.decrypt_and_check_padding(cipher_block[c],text_iv) is True):
                            possible_byte=bytes(byte)
                            break
            plain_block+=bytes(possible_byte)
        plain+=plain_block
    return unpad(plain)

if __name__=='__main__':
    text=[
          'MDAwMDAwTm93IHRoYXQgdGhlIHBhcnR5IGlzIGp1bXBpbmc=',
          'MDAwMDAxV2l0aCB0aGUgYmFzcyBraWNrZWQgaW4gYW5kIHRoZSBWZWdhJ3MgYXJlIHB1bXBpbic=',
          'MDAwMDAyUXVpY2sgdG8gdGhlIHBvaW50LCB0byB0aGUgcG9pbnQsIG5vIGZha2luZw==',
          'MDAwMDAzQ29va2luZyBNQydzIGxpa2UgYSBwb3VuZCBvZiBiYWNvbg==',
          'MDAwMDA0QnVybmluZyAnZW0sIGlmIHlvdSBhaW4ndCBxdWljayBhbmQgbmltYmxl',
          'MDAwMDA1SSBnbyBjcmF6eSB3aGVuIEkgaGVhciBhIGN5bWJhbA==',
          'MDAwMDA2QW5kIGEgaGlnaCBoYXQgd2l0aCBhIHNvdXBlZCB1cCB0ZW1wbw==',
          'MDAwMDA3SSdtIG9uIGEgcm9sbCwgaXQncyB0aW1lIHRvIGdvIHNvbG8=',
          'MDAwMDA4b2xsaW4nIGluIG15IGZpdmUgcG9pbnQgb2g=',
          'MDAwMDA5aXRoIG15IHJhZy10b3AgZG93biBzbyBteSBoYWlyIGNhbiBibG93'
         ]
    oracle=Oracle(text)
    result=attack_padding(oracle.get_cipher(),oracle)
    print(b64decode(result))
我想要达到的结果

有谁能跟我说说该咋搞?