Esempio n. 1
0
def encrypt_CBC(key, text):
    block_size = 16
    
    text_blocks = generate_blocks(pad(text), block_size)
    initialisation_vector = b'\x00' * block_size

    cipher_blocks = [initialisation_vector]
    for i in range(len(text_blocks)):
        xor = fixed_xor(cipher_blocks[i], text_blocks[i])
        cipher_blocks.append(encrypt_ECB(key, xor, add_padding=False))

    return "".join(cipher_blocks[1:])
Esempio n. 2
0
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))
Esempio n. 3
0
def repeating_key_xor(key, text):
    return "".join([fixed_xor(text[i], key[i%len(key)]) for i in range(len(text))])