Форум сайта python.su
Помогите реализовать алгоритм шифрования подстановкой степени n.
Пример:
Если для преобразования используется подстановка
1 2 3 4 5 6
5 4 3 1 2 6
и в соответствии с ней зашифровывается слово ПРИМЕР, то получится МЕИРПР.
Нужно сделать шифрование, дешифрование, формирование ключа и выдачу на экран: исходного текста, ключа, шифрованного текста и расшифрованного текста.
Потом сам сделаю на формы
Офлайн
SuperBlurЭто как оно так получится?
Если для преобразования используется подстановка
1 2 3 4 5 6
5 4 3 1 2 6
и в соответствии с ней зашифровывается слово ПРИМЕР, то получится МЕИРПР.
Офлайн
py.user.next
Здесь мы делали уже.
Офлайн
SuperBlurЭто симметричный шифр, для дешифрации используется шифратор.
там нету дешифратора
SuperBlurНу, сформируй ключ и покажи, как ты это делаешь.
ключ не формируется
Офлайн
Помоги доделать данный код
Выдает ошибки при шифрование и дешифрование, нужно чтобы бралось значение ключа который формируется
import tkinter as form from random import sample def encrypt_text(text, key): if len(text) != len(key): raise ValueError('...') out = ''.join(text[i-1] for i in map(int, key)) return out def decrypt_text(text1, key1): if len(text1) != len(key1): raise ValueError('...') out =''.join([i[0] for i in sorted(zip(text1, key1), key=lambda i: int(i[1]))]) return out def process(): text = entry_in.get() key = int(entry_key.get()) text_crypto = encrypt_text(text, key) entry_out.delete(0, 'end') entry_out.insert(0, text_crypto) def process2(): text1 = entry_out.get() key1 = int(entry_key.get()) text_decrypto = decrypt_text(text1, key1) entry_no.delete(0, 'end') entry_no.insert(0, text_decrypto) def key(): text = entry_in.get() key = sample(range(1, len(text) + 1), len(text)) entry_key.delete(0, 'end') entry_key.insert(0, ''.join(map(str, key))) root = form.Tk() root.geometry('200x300') lbl1 = form.Label(text='Введите текст').pack() entry_in = form.Entry(width=30) entry_in.pack() lbl_key = form.Label(text='Ключ шифрования').pack() entry_key = form.Entry(width=30, text='') entry_key.pack() lbl2 = form.Label(text='Зашифрованый текст').pack() entry_out = form.Entry(width=30) entry_out.pack() btn_key = form.Button(text='Создать ключ', command=key) btn_key.pack() btn = form.Button(text='Шифрование', command=process) btn.pack() btn2 = form.Button(text='Дефишрование', command=process2) btn2.pack() lbl3 = form.Label(text='Дешифрованный текст').pack() entry_no = form.Entry(width=30) entry_no.pack() root.mainloop()
Офлайн
SuperBlurА если он неправильный? Какой смысл его доделывать?
Помоги доделать данный код
Офлайн
py.user.nextА самое главное для чего используется такой кривой механизм
Офлайн
py.user.nextэээ а почему …
Здесь мы делали уже.
{1:5, 2:4, 3:3, 4:1, 5:2, 6:6}
Отредактировано AD0DE412 (Окт. 1, 2022 13:24:19)
Офлайн
AD0DE412Какие слайсы? У тебя тут ни одного слайса нет. Пара ключ-значение в словаре слайсом не является, даже несмотря на наличие двоеточия.
эээ мне кажется что просто проще в слайсы а поторм переставить (по сути отсортировать) словарем типа
Офлайн
похоже мы друг друга не поняли
режим текст на куски (ага ваш большой такой текст) по шесть символов в данном случаее
потом переставлямв в каждом куске по словарю (наш ключ шифрования) символы
… или я не првильно понимаю как работает это шифрование?
зы просто лбопытно
Отредактировано AD0DE412 (Окт. 1, 2022 14:21:38)
Офлайн