Как сделать дешифрование обратной функции для моей функции шифрования - PullRequest
1 голос
/ 12 апреля 2020

Это функция шифрования, и она хорошо работает

def encrypt(password):
    for i in (password):
        print(dict_Chiper[i])
        not_Encrpyted = ''.join(dict_Chiper[i] for i in password)
        Encrpyted = ''.join(reversed(not_Encrpyted))
    print(Encrpyted)
    return Encrpyted

Это обратный словарь, который я создаю в отношении dict_Chiper для шифрования

dict_Dechiper = {v: k for k, v in dict_Chiper.items()}

Это неисправная функция. Это также неисправно в словаре? Должен ли я сделать словарь вручную?

def decrypt(password):
    not_Decrypted = reversed(password.split('\n', 12))
    print(not_Decrypted)
    Decrypted = ''.join(dict_Dechiper[j] for j in (not_Decrypted))
    print(Decrypted)
    return

1 Ответ

1 голос
/ 12 апреля 2020

Учитывая ваши password = "abcabc" и dict_Chiper = {"a":"b", "b":"c", "c": "d", "d":"a"}, зашифрованный результат будет "dcbdcb", и без каких-либо изменений ваш расшифровывающий код в итоге выдаст исключение: KeyError: 'dcbdcb'.

Это потому, что reversed(password.split('\n', 12)) возвращает объект list_reverseiterator, который фактически не будет перебирать строку, которую вы пытаетесь расшифровать. Вместо этого он перебирает список, который выглядит как ['dcbdcb']. Вот почему он выдал ошибку ключа.

Чтобы исправить это, я удалил оператор split, создал строку из обратного итератора и, чтобы сохранить согласованность, возвратил расшифрованный пароль:

def decrypt(password):
    not_Decrypted = ''.join(reversed(password))
    Decrypted = ''.join(dict_Dechiper[j] for j in (not_Decrypted))
    return Decrypted

И из-за разделения '\n' можно предположить, что вы хотите расшифровать строку, содержащую несколько паролей, разделенных \n. Для этого потребуется внести несколько изменений:

def decrypt(password):
    not_Decrypted_list = [''.join(reversed(each_password)) for each_password in password.split('\n', 12)]
    not_Decrypted = '\n'.join(not_Decrypted_list)
    Decrypted = ''.join(dict_Dechiper[j] for j in (not_Decrypted))
    return Decrypted
  • not_Decrypted_list: список с обратными зашифрованными паролями, разделенными '\n'.
  • not_Decrypted: строка, содержащая not_Decrypted_list элементов, разделенных '\n'

Обратите внимание, что в вашем dict_Dechiper должно быть отображение '\n': '\n'. В противном случае он выдаст KeyError: '\n'

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