@WhiteNiBBa

Как написать шифр Плейфера на python?

На лабораторной задали написать шифратор и дешифратор шифра Плейфера. Для начала решил написать шифратор для постоянной матрицы. Но что-то пошло не так. Для понимания работы объясню, как работает шифр. На вход поступает фраза. Далее производятся следующие действия:
1) Если в слове имеются 2 одинаковые буквы, стоящие рядом, то между ними вставляется буква. ( в данном случае "Я")
2) Если кол-во символов во фразе нечетное, то в конец ставится "Я"
3) Фраза делится на условные биграммы
4) В матрице строится условный квадрат, 2-мя противоположными углами которого являются буквы из биграммы.
5) Далее эти буквы заменяются другими, находящимися по углам квадрата(сверху или снизу)
6) Если буквы находятся на одной строке, то сдвигаются вправо на 1 .
7) Если буквы находятся в одном столбце, то меняются на 1 вниз.
8) Фраза собирается обратно
Вот мой код, который некоторые символы шифрует нормально, а некоторые нет
text = input('Введите текст : ')
text = [x for x in text]
res = ''
m = [
    ["Н","И","К","О","Л","А"],
    ["Б","В","Г","Д","Е","Ё"],
    ["Ж","З","Й","М","П","Р"],
    ["С","Т","У","Ф","Х","Ц"],
    ["Ч","Ш","Щ","Ь","Ы","Ъ"],
    ["Э","Ю","Я",".","-","_"],
    ]
for i in range(1,len(text)):
    if text[i] == text[i-1]:
        text.insert(i,'Я')
if len(text)%2 != 0:
    text.append('Я')
for i in range(0,len(text),2):
    a1 = -1; a2 = -1; b1 = -1; b2 = -1
    for a in range(5):
        for b in range(5):
            if a1 == -1:
                if text[i] == m[a][b]:
                    a1 = a; b1 = b
            if a2 == -1:
                if text[i+1] == m[a][b]:
                    a2 = a; b2 = b
    if a1 == a2:
        if b1 == 5 or b2 == 5:
            if b1 == 5:
                b1 = 0
                b2 += 1
            else:
                b2 = 0
                b1 += 1
        
        else :
            b1 += 1
            b2 += 1
    else:
        if b1 == b2:
            if a1 == 5 or a2 == 5:
                if a1 == 5:
                    a1 = 0
                    a2 += 1
                else:
                    a2 = 0
                    a1 += 1
            
            else:
                a1 += 1
                a2 += 1
        else:
            a1,a2 = a2,a1
    res += m[a1][b1]
    res += m[a2][b2]
print(res)
  • Вопрос задан
  • 202 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы