Как я могу изменить свой код для вывода того же текста, который был введен до шифрования, после дешифрования? - PullRequest
0 голосов
/ 11 апреля 2019

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

Согласно тому, что я сделал, я успешно могу получить сообщение после запуска алгоритма дешифрования, но результат не в том порядке, в котором я его указывал при вводе данных.Это означает, что: 'h' преобразуется в 'H', как и в случае с другими буквами.

# Encryption
# Trial 4

in_text = input('Enter the text that you want to encrypt: ').lower()
out_text = []
for i in in_text:
    if i == ' ':
        out_text.append(i)
        continue
    elif i in 'aeiou':
        out_text.append(ord(i) + 4)
        continue
    else:
        out_text.append(i)
final = ''.join(str(e) for e in out_text)
print(final)

# Decryption
# Trial 2

import string

user_input = input('Enter the text that you want to decrypt: ')
d_out = []
z = ''
for i in user_input:
    if i == ' ':
        d_out.append(i)
        continue
    elif i in 'bcdfghjklmnpqrstvwxyz':
        d_out.append(i)
        continue
    elif i in string.digits:
        z = z + i
        n = len(z)
        if n == 3:
            d_out.append(chr(int(z) - 4))
            z = ''

my_str = ''
for a in d_out:
    my_str = my_str + a

print(f'The decrypted message is: {my_str.title()}')

Когда я удаляю ".lower ()" в моем коде шифрования и ".title ()"в моем коде дешифрования результат отличается после дешифрования, и на нем напечатаны некоторые специальные символы.

Пожалуйста, дайте мне знать, как я могу продолжить то же самое.

Ваш ответ будетвысоко ценится!

Case 1

ENCRYPTION

Введите текст, который вы хотите зашифровать: hello World h105ll115 w115rld

DECRYPTION

Введите текст, который вы хотите расшифровать: h105ll115 w115rld Расшифрованное сообщение: Hello World

Case 2

После удаления ".lower ()" и ".title ()"

Создание кода шифрования следующим образом:

in_text = input('Enter the text that you want to encrypt: ')
out_text = []
for i in in_text:
    if i == ' ':
        out_text.append(i)
        continue
    elif i in 'aeiouAEIOU':
        out_text.append(ord(i) + 4)
        continue
    else:
        out_text.append(i)
final = ''.join(str(e) for e in out_text)
print(final)

Создание кода дешифрования следующим образом:

import string

user_input = input('Enter the text that you want to decrypt: ')
d_out = []
z = ''
for i in user_input:
    if i == ' ':
        d_out.append(i)
        continue
    elif i in 'bcdfghjklmnpqrstvwxyz':
        d_out.append(i)
        continue
    elif i in string.digits:
        z = z + i
        n = len(z)
        if n == 3:
            d_out.append(chr(int(z) - 4))
            z = ''

my_str = ''
for a in d_out:
    my_str = my_str + a

print(f'The decrypted message is: {my_str}')

Вывод выглядит следующим образом:

Шифрование

Введите текст, который вы хотите зашифровать: Hello world H105ll115 w115rld

Расшифровка

Введите текст, который вы хотите расшифровать: H105ll115 w115rld Зашифрованное сообщение: ello world

Случай 1 и Случай 2 имеют разные выходы, но проблема 'h 'будучи' H 'или' W ', будучи' w 'или другими символами того же порядка, все еще существует.

1 Ответ

0 голосов
/ 12 апреля 2019

Есть несколько проблем.

Во-первых, только ваша процедура шифрования учитывает заглавные буквы.

Во-вторых, во время дешифрования вы просматриваете свой зашифрованный текст за символом, в то время как ваше шифрование использует ord напрямую. ord будет генерировать несколько цифр на символ.


Подобные проблемы могут и должны быть обнаружены с использованием отладчика вместо StackOverflow. Это не ненормальное выполнение программы, код делает именно то, что вы говорите, но это неверно.

Сначала я посмотрю на реализации Viginere и намекаю на это, если вы не знаете, как выполнять такого рода кодировки.


Вам придется так или иначе решить проблему с несколькими цифрами, иначе вы не сможете различить, где начинается или заканчивается каждое число , если они находятся рядом друг с другом. Например, вы можете поставить цифры в скобках, например, [69] для «шифрования» A (хах, интересная позиция в вашем зашифрованном тексте) и экранирующие скобки, подобные этим [[ и ]], если вам требуется, чтобы скобки были частью текста.

Это должно быть частью описания вашей схемы, которое вы, вероятно, должны продумать до того, как вы (повторно) начнете программировать. Случайные попытки не сработают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...