Найти - Пользователи
Полная версия: подстановка степени n
Начало » Python для новичков » подстановка степени n
1 2
SuperBlur
Помогите реализовать алгоритм шифрования подстановкой степени n.
Пример:
Если для преобразования используется подстановка
1 2 3 4 5 6
5 4 3 1 2 6
и в соответствии с ней зашифровывается слово ПРИМЕР, то получится МЕИРПР.
Нужно сделать шифрование, дешифрование, формирование ключа и выдачу на экран: исходного текста, ключа, шифрованного текста и расшифрованного текста.
Потом сам сделаю на формы
py.user.next
SuperBlur
Если для преобразования используется подстановка
1 2 3 4 5 6
5 4 3 1 2 6
и в соответствии с ней зашифровывается слово ПРИМЕР, то получится МЕИРПР.
Это как оно так получится?

Здесь мы делали уже.
SuperBlur
py.user.next
Здесь мы делали уже.

Да я видел,но данный код не подходит, там нету дешифратора и ключ не формируется
py.user.next
SuperBlur
там нету дешифратора
Это симметричный шифр, для дешифрации используется шифратор.

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()
py.user.next
SuperBlur
Помоги доделать данный код
А если он неправильный? Какой смысл его доделывать?

Сначала словами опиши, без всякого кода, каким образом ты шифрование производишь.
ZerG
py.user.next
А самое главное для чего используется такой кривой механизм
AD0DE412
py.user.next
Здесь мы делали уже.
эээ а почему …
эээ мне кажется что просто проще в слайсы а поторм переставить (по сути отсортировать) словарем типа
 {1:5, 2:4, 3:3, 4:1, 5:2, 6:6}
или я в чемто ошибаюсь?
py.user.next
AD0DE412
эээ мне кажется что просто проще в слайсы а поторм переставить (по сути отсортировать) словарем типа
Какие слайсы? У тебя тут ни одного слайса нет. Пара ключ-значение в словаре слайсом не является, даже несмотря на наличие двоеточия.

А по поводу словаря - зачем тут словарь? Да и если бы он был подходящим способом для решения этой задачи, то для длинного текста где-то в тысячу символов ты этот словарь не создашь просто.
AD0DE412
похоже мы друг друга не поняли
режим текст на куски (ага ваш большой такой текст) по шесть символов в данном случаее
потом переставлямв в каждом куске по словарю (наш ключ шифрования) символы
… или я не првильно понимаю как работает это шифрование?
зы просто лбопытно
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB