Как изменить шифротекст в Python?

Я пытаюсь изучать Python и криптографию одновременно.

Я пытаюсь немного (или более) изменить зашифрованный текст, чтобы увидеть, как это повлияет на мой открытый текст при расшифровке.

Например:

from Crypto.Cipher import AES
import base64
import os

BLOCK_SIZE = 16
key = os.urandom(BLOCK_SIZE)

PADDING = '{'
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING

EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING)

cipher = AES.new(key)

# encode a string
encoded = EncodeAES(cipher, 'This is some text.')
print 'Encrypted string:', encoded

# decode the encoded string
decoded = DecodeAES(cipher, encoded)
print 'Decrypted string:', decoded

Поэтому я хочу снова расшифровать, за исключением того, что изменил зашифрованный текст ("закодированный") перед расшифровкой.

Благодарю.

1 ответ

Самым простым способом, который я могу придумать, является введение шума в encoded Строка должна изменить каждый n-й символ в ней. Вы можете поиграть со строковыми манипуляциями, чтобы ввести более или менее случайный шум (сделать n-ый случайным символом, изменить его на каждой итерации и т. Д.).

Добавьте эту функцию и импортируйте куда-нибудь перед вашим кодом:

import string
import random

def noise_every_n(input, n, first=0):
    output = ""
    for i, c in enumerate(input, -first):
        if i % n == 0: # using ascii_letters and digits is just what came to mind, there's other ways to get random characters.
            output += random.choice(string.ascii_letters + string.digits)
        else:
            output += c
    return output

Затем позвоните следующее между encode а также decode:

every_n = random.randint(3, 5) # or just set it to a small integer
encoded = noise_every_n(encoded, every_n) 

Функция выше была адаптирована из этого ответа переполнения стека.

Другие вопросы по тегам