В начале я расскажу, что из себя представляет шифр квадрат Полибия. Я буду рассматривать его на примере английского алфавита.
Для каждого языка составляется таблица шифрования обычно с равным количеством пронумерованных строк и столбцов, но это не обязательно, параметры которой зависят от его мощности (количества букв в алфавите). Берутся два целых числа, произведение которых будет близко к количеству букв в языке, таким образом, получаем нужное число строк и столбцов. Затем вписываем в таблицу все буквы алфавита подряд — по одной в каждую клетку. При нехватке клеток можно вписать в одну две буквы (редко употребляющиеся или схожие по употреблению).
Я составил квадрат с английскими буквами и цифрами от 0 до 9.
Шифрование заключается в том, что буквы заменяются на цифры на пересечении которых стоит буква, первая цифра - это строка, вторая - это столбец. Например h-22,g-21.
Расшифрование происходит в обратном порядке. То есть цифры заменяются на буквы 22-h, 21-g.
Теперь собственно сама программа реализованная на языке python. Сейчас я покажу более простую реализацию шифра, а в следующей статье усложненную версию шифра.
В начале составляем словарь где ключами являются буквы, а значениями цифры на пересечений которых находится буква.
keys={
'a':'11', 'b':'12', 'c':'13', 'd':'14', 'e':'15', 'f':'16',
'g':'21', 'h':'22', 'i':'23', 'j':'24', 'k':'25', 'l':'26',
'm':'31', 'n':'32', 'o':'33', 'p':'34', 'q':'35', 'r':'36',
's':'41', 't':'42', 'u':'43', 'v':'44', 'w':'45', 'x':'46',
'y':'51', 'z':'52', '0':'53', '1':'54', '2':'55', '3':'56',
'4':'61', '5':'62', '6':'63', '7':'64', '8':'65', '9':'66'}
В качестве примера буду зашифровывать строку "helloworld"
text='helloworld'
crypt='' создаем пустую строку куда будем помещать пары цифр
for i in text: -перебираем буквы нашего текста
for j in keys: перебираем ключи словаря
if i==j: если текст равен ключу словаря
crypt+=keys[j] +' ' тогда добавляем значение словаря под
которым находится буква в переменную crypt
и добавляем пробел.
В итоге у нас получилась строка 22 15 26 26 33 45 33 36 26 14.Теперь расшифруем данное сообщение
crypt=[str(i) for i in crypt.split()] преобразуем нашу строку в список из пар
чисел
decrypt='' создаем пустую строку куда будем помещать получившиеся буквы
for i in crypt: перебираем пары чисел
for j in keys: перебираем ключи словаря
if keys[j]==i: если значение словаря равно числу из нашего списка
decrypt+=j то добавляем ключ(букву) в строку
В итоге получаем строку helloworld. В следующий статье покажу усложненную версию данного шифра.