Шифр пар на питоне

Перестановочный шифр

Добрый вечер!
Реализовал шифрование с помощью перестановочного шифра, а вот с дешифровкой запутался, вроде и не сложно, но не получается реализовать.
Кто может помочь или подсказать?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
import random def encode(text, key): n = len(text) m = len(key) d = n % m if d != 0: for i in range(m - d): text += chr(random.randrange(ord('а'), ord('я'), 1)) n = len(text) p = '' q = 0 while q  n: p += ''.join(text[q+x] for x in key) q += m return p print(encode('Перестановочный шифр', [3, 0, 2, 1]))

Столбцевой перестановочный шифр или как создать bytearray матрица
Здравствуйте П Р О Г Р А М М Н О Е О Б Е С П Е Ч Е Н И Е В Ы Ч И С Л И Т Е Л Ь Н О Й Т Е Х.

Шифр, необычный шифр
Шифр показан на картинке, раньше таких не видел, решаю уже несколько часов

Перестановочный шифр
Помогите пожалуйста. Нужно написать комментарии вот к этой программе (нужны к каждой строчке).

Перестановочный шифр.
На основе этого мне нужно написать рабочий код на С++. Материал прочитан на несколько раз и уже.

Перестановочный шифр 2
Еще один вариант перестановочного шифра. Алгоритм Из текста берутся символы и ставятся.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
import random def crypto(s,key): random.seed(key) ln = len(s) keys = random.sample(range(ln),ln) out = '' for i in keys: out += s[i] return out def encrypt(s,key): random.seed(key) ln = len(s) keys = random.sample(range(ln),ln) out = [' ' for _ in range(ln)] for i,j in zip(keys,s): out[i] = j return ''.join(out) s1 = crypto('Пример шыфруемой строки\nметодом перестановки',5) print('crypt:\n'+s1) print ('encrypt:\n'+encrypt(s1,5))

Придумал интересное решение как немного автоматизировать процесс
А как дешифровка работает способ xXapokalypsesXx если прогнать его много раз подряд.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
#метод шифровки перестановка ''' шифр перестановки @autor: EVGSuslov ''' import sys import random min_n=3 # Минимальное число для алгоритма деления k=0 #для определения TRUE FALSE на простое print("введите сообщение") s = input() print('кол-во букв в тексте' + str(len(s))) #считает символы len_ar=(len(s)) for i in range(2, len_ar // 2+1): #проверяет простое ли число и останваливает скрипт если да if len_ar % i == 0: k+=1 if (k!=0): print(str(len_ar)+' это простое число') else: print(str(len_ar) + ' это не простое число'+ '\n' +'Введите иное сообщение') sys.exit() #тут в строке надо добавить лишний символ в конце но я #прерываниемамаамама while len_ar % min_n != 0: # while true пока остаот от деленеия не равен 0 if len_ar % min_n == 0: # если остаток от деления равен 0 print ('') break elif len_ar % min_n != 0: min_n+=1 # если остаток от деления не равен 0 else: rng = list(range(0, min_n)) print('this is your key = ' ) random.shuffle(rng) print(rng) def encode(text, key): n = len(text) #Метод xXapokalypsesXx m = len(key) p = '' q = 0 while q  n: p += ''.join(text[q+x] for x in key) q += m return p print(encode(s,rng))

перестановочный шифр
Доброе время суток! Помогите написать программу на Delphi используя шифр перестановки, например.

Перестановочный шифр
Подскажите пожалуйста, как перебрать порядок цифр ключа(4ххх5 (известны 2 цифры ключа, остается.

Перестановочный шифр
Перестановочных шифров много. Это один из наиболее простых. Суть алгоритма в том, что сначала.

Столбцевой перестановочный шифр
Здравствуйте, помогите, пожалуйста. Нужно реализовать простой столбцевой перестановочный шифр. .

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

Источник

Шифр пары

Суть шифра: алфавит случайным образом записывают в 2 строки, и шифрования текста происходит заменой буквы на соседнюю ей по вертикали.
Пример таблицы:

а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я -

Найдите все пары элементов последовательности, в которых сумма элементов пары – это число, которого нет в последовательн
В файле 17-333.txt содержится последовательность целых чисел. Элементы последовательности –.

Задача про ввод пары чисел и пары рандомных чисел
Помогите плиз разобраться с задачей на Python Вводится 2 числа с клавиатуры (от 1 до 20). Так же.

Шифр, необычный шифр
Шифр показан на картинке, раньше таких не видел, решаю уже несколько часов

Разделите строку на пары из двух символов и поместите эти пары в список
Добрый вечер) Ребят, подскажите, пожалуйста, по задаче Дана строка my_str. Разделите эту строку на.

Эксперт PythonЭксперт Java

Лучший ответ

Сообщение было отмечено Viorkss как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
import random alpha = list("абвгдеёжзийклмнопрстуфхцчшщъыьэюя-") # random.shuffle(alpha) p = len(alpha) // 2 p1, p2 = alpha[:p], alpha[p:] s = 'привет' # input() for i in s: if i in p1: print(p2[p1.index(i)], end='') elif i in p2: print(p1[p2.index(i)], end='') else: print(i, end='')

Источник

Кодировки и шифрование¶

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

Наиболее распространённые кодировки

Латинские буквы, цифры и простые символы

Кириллическая кодировка (русский и другие языки)

Кодировка для русского языка

Юникод-кодировка, все языки (длина символа — 8 бит)

Юникод-кодировка, все языки (длина символа — 16 бит)

Unicode — стандарт кодирования символов, включающий в себя знаки почти всех письменных языков мира. В настоящее время стандарт является преобладающим в Интернете.

  • стандарт включает более 138 тысяч символов;
  • каждый символ имеет определённое название и код (номер);
  • коды состоят из латинских букв и шестнадцатеричных цифр, например: U+0073 .

Примеры кодов, имен и соответствующих символов:

Конвертация данных между байтам и строками¶

Данные по сети передаются, как правило, в байтах. Например, метод socket.recv() получает данные в байтах. Чтобы преобразовывать данные из байт в строки и наоборот используются специальные методы:

  • метод encode(‘encoding_name’) — позволяет перевести данные из строки в байты (str -> bytes);
  • метод decode(‘encoding_name’) — позволяет перевести данные из байт в строку (bytes -> str);

В коде будет выглядеть так:

# кодирование строки в байты s = 'привет' s_bytes = s.encode ('utf-8') print (s_bytes) Out: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' # декодирование байт в строку s_dec = s_bytes.decode ('utf-8') print (s_dec) Out: привет 

При работе с кодировкой важно помнить:

  1. Если вы кодируете строку в байты кодировкой UTF-8, то и перекодировать её из байт нужно этой же кодировкой. Некоторые кодировки совместимы, но в большинстве случаев, нарушения этого правила ведёт к потере данных.
  2. В своём коде всегда используйте кодировки Unicode, оптимально UTF-8, она используется по умолчанию в большинстве методов и функций, так что это снижает риск ошибок.
  3. Декодирование байтовых данных в строки лучше производить сразу после их получения, а кодирование в байты — только перед отправкой. В коде лучше работать с привычными типами данных (строки, списки, числа), не с байтами, ведь большинство методов в Python с байтовыми строками не работают (или работают не так, как можно ожидать).

Шифрование¶

Шифр Цезаря

Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите. Например, в шифре со сдвигом вправо на 3, A была бы заменена на D, B станет E, и так далее.

Формула для кодирования символа:

symbol_encoded = ((((symbol) - first + key) % size) + first) 

Алфавит случайным образом записывают в 2 строки, и шифрование текста происходит заменой буквы на соседнюю ей по вертикали. Например:

['v', 'q', 'f', 's', 'p', 'u', 'n', 'a', 'm', 'j', 'c', 'k', 'h'] ['l', 'r', 'o', 'e', 'x', 'd', 'z', 'g', 'b', 'w', 't', 'i', 'y'] In: hello Out: ysvvf 

Шифр Виженера

На алфавите длиной N вводят операцию добавления (циклического сдвига) букв. Пронумеровав буквы, добавляем их по модулю N (для англ. алфавита N=26).

Выбираем слово-ключ (пускай pass) и подписываем его под сообщением сколько нужно раз:

Сообщение: search Ключ: passpa Шифр: hesjrh 

Задания¶

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

2. Напишите функцию для шифрования файла шифром Цезаря. Расшифруйте:

key = 2 s = 'Oquv uvctu ctg qdugtxgf vq dg ogodgtu qh dkpctb uvct ubuvgou' 

3. Напишите функцию для шифрования файла шифром пар. Расшифруйте:

d_1 = [109, 122, 106, 115, 100, 99, 105, 120, 110, 98, 121, 118, 107] d_2 = [112, 103, 108, 104, 111, 102, 119, 117, 97, 101, 116, 113, 114] s = 'A hynk wh na nhykdadpwfnj delbfy fdahwhywaz dc n jxpwadxh hmsbkdwo dc mjnhpn sbjo ydzbysbk et wyh dia zknqwyt.' 

4.* Напишите функцию для шифрования файла шифром Виженера. Расшифруйте. 5. Добавьте в чат (с кодировкой) возможность выполнять шифрование и дешифрование сообщения одним из шифров по выбору пользователя. 6. Доработайте чат таким образом, чтобы пользователь отправлял серверу имя зашифрованного файла и шифр, а сервер дешифровал его и отправлял содержимое файла обратно пользователю.

Полезные ссылки¶

Источник

Читайте также:  Проверка синтаксиса php скрипта
Оцените статью