def decrypt_ECB(key, text, strip_padding=True): cipher = AES.AESCipher(key, AES.MODE_ECB) decrypted = cipher.decrypt(text) # Strip padding when decrypting whole messages. # Don't do it if only decrypting a single block. if strip_padding: return unpad(decrypted) else: return decrypted
def decrypt_CBC(key, text): block_size = 16 cipher_blocks = generate_blocks(text, block_size) initialisation_vector = b'\x00' * block_size cipher_blocks.insert(0, initialisation_vector) text_blocks = [] for i in range(len(cipher_blocks) - 1): decrypted = decrypt_ECB(key, cipher_blocks[i + 1], strip_padding=False) text_blocks.append(fixed_xor(cipher_blocks[i], decrypted)) return unpad("".join(text_blocks))