Расшифровка Python - PullRequest
       5

Расшифровка Python

3 голосов
/ 22 апреля 2011

В настоящее время я работаю над домашним заданием, и нам нужно создать функцию, в которой мы создадим трехэтапную программу шифрования / дешифрования. Один из шифров, который мы должны построить, - это перестановка / ограждение, которое принимает переменную (n) в качестве числа «рельсов», в которые вы хотели бы зашифровать сообщение. Я построил шифрование, но я м при потере метода дешифрования.

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

Если вы не уверены, что я подразумеваю под транспонированием шифрования / ограждения рельсов, вот пример ...

Message = abcdefg
n = 3

В конечном итоге он будет зашифрован на 3 группы (как отмечено n), и эти группы будут "adg be cf", и оттуда шифрование объединит их в одну строку "adgbecf". Моя проблема - разбить их обратно на три исходных строки "adg be cf", а затем перенести их обратно в исходные значения.

Шифрование:

def trans_encrypt(message, n):
    cipher = ""
    for i in range(n):
        for j in range(i, len(message), n):
            cipher = cipher + message[j]
    return cipher

Текущее дешифрование (не работает):

def trans_decrypt(cipher, n):
    length = len(cipher) // n
    message = ''
    for i in range(length): 
        for j in range(n):
            letter = (i + j * length) 
            message = message + cipher[letter] 
    return message

Ответы [ 2 ]

3 голосов
/ 22 апреля 2011

Если ваш метод шифрования правильный, (кто-то заметил, что это не железнодорожный шифр), верно следующее:

Вы можете выполнить шифрование следующим образом:

>>> def trans_encrypt(message,n):
...     return "".join([message[i::n] for i in range(n)])
... 
>>> trans_encrypt(a,3)
'adgbecf'

Я дам вам подсказку о вашей расшифровке:

>>> b = 'adgbe cf '
>>> trans_encrypt(b,3)
'abcdefg  '

Я вставил пробелы в строку «encrpyted» и просто использовал метод encrypt в строке «encrypted» для ее расшифровки.Я получил правильный результат с некоторыми дополнительными ожидаемыми пробелами в конце.

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

Ваш метод расшифровки можетпросто измените сообщение (вставляя пробелы), вызовите свой метод шифрования и уберите завершающий пробел.

1 голос
/ 22 апреля 2011

Проблема в том, что шифр не обязательно делится на n равномерно, поэтому ваши «бины», созданные функцией шифрования, не имеют одинаковую длину.Первые ячейки len (шифра)% n имеют одну дополнительную букву.

Если при выполнении итерации по j в функции дешифрования, если i меньше, чем len (шифр)% n, диапазон должен быть n + 1.

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