Здравствуйте уважаемые читатели. Помимо выкладывание глав книг, я буду заниматься так же обзором всего, что мне нравиться (от еды до игр), а так же выкладыванием статей различного содержания, что мне приходилось или приходиться делать по учебе.
На первой лабораторной работе по предмету информационная безопасность, наш преподаватель попросил нас реализовать алгоритм шифровки и расшифровки сообщения 3мя способами.
Надеюсь моя статья поможет кому-нибудь разобраться в этой теме, а тем временем мы приступаем.
Шифр цезаря
Для шифра цезаря человек получает на вход сообщение и ключ(число).
Шифрование этим методом подразумевает под собой заменной букв в слове на другие с отступом в определенное количество символов.
Для наглядности приведу пример. Мы шифруем сообщение ав с ключем 3
а первая буква в алфавите 1+3=4 получаем четвертую букву в алфавите, а это г. Тоже проворачиваем с в и получаем букву е. Таким образом, сообщение ав будет зашифровано как ге.
Все алгоритмы шифрования который я представлю в этой статье были написан на языке программирования питон. В среде разработки PyCharm
llst = ['а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш',
'щ','ъ','ы','ь','э','ю','я']
prov=int(input("Если вы хотите зашифровать слово введите 1 расшифровать введите 2\n"))
if prov == 1:
word=input("введите слово для шифрования\n")
klu=int(input("введите ключ для шифрования\n"))
print("слово после шифрации\n")
for s in word :
if s==' ':
print(s,end='')
continue
por=llst.index(s)
por=por+klu
while por>32:
por=por-33
while por < 0:
por = 33 + por
print(llst[por],end='')
print("\n")
if prov == 2:
word = input("введите слово для дешифрования\n")
klu = int(input("введите ключ для дешифрования\n"))
print ("слово после дешифрации\n")
for s in word:
if s==' ':
print(s,end='')
continue
por = llst.index(s)
por = por - klu
while por < 0:
por = 33+por
while por>32:
por=por-33
print(llst[por], end='')
Пример работы программы, В данной реализации она не распознает заглавные буквы а так же вспомогательные знаки будь то ! или точка.
Шифр Вижинера
Шифр Вижинера более криптостойкий благодаря тому, что ключом в данном шифре будет являться не число, а слово.
Буквы которые есть в этом слове переводятся в число посредством его порядкового номера. Если сообщение больше чем заданный ключ то он начинает повторяться, что позволяет зашифровать сообщение любой длинны как и шифр цезаря
Реализация шифра Вижинера предоставлена ниже
nom=0
klush=[]
llst = ['а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у',
'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я']
prov = int(input("Если вы хотите зашифровать слово введите 1 расшифровать введите 2\n"))
if prov == 1:
word = input("введите слово для шифрования\n")
klu = input("введите ключ для шифрования\n")
print("слово после шифрования\n")
for g in klu:
nom=nom+1
klush.append(g)
non=0
for s in word:
if s==' ':
print(s,end='')
continue
por = llst.index(s)
sp=klush[non]
por = por + llst.index(sp)+1
while por>32:
por=por-33
non=non+1
if non==nom:
non=0
print(llst[por], end='')
print("\n")
if prov == 2:
word = input("введите слово для дешифрования\n")
klu = input("введите ключ для дешифрования\n")
print("слово после дешифрования\n")
for g in klu:
nom = nom + 1
klush.append(g)
non = 0
for s in word:
if s==' ':
print(s,end='')
continue
por = llst.index(s)
sp = klush[non]
por = por - llst.index(sp)-1
while por < 0:
por = 33 + por
non = non + 1
if non == nom:
non = 0
print(llst[por], end='')
Пример работы программы. Знаки и заглавные буквы он так-же не обрабатывает но по желанию вы можете добавить это сами.
Шифр Скиталы
Наиболее интересный шифр из представленных в этой статье.
Если говорить простым языком то суть будет заключаться в следующем:
Мы записываем сообщение не в 1 строчку а в несколько и после записи меняем строки со столбцами. При реализации программным методом нам потребуется указать сообщение и количество строк. Недостающие символы заполняться автоматически пробелами.
Реализация шифра Скиталы предоставлена ниже
prov=int(input("Если вы хотите зашифровать предложение введите 1 расшифровать введите 2\n"))
if prov == 1:
mas=[]
sh=0
c=0
i=1
j=1
pred = input ("Введите предложение\n")
for i in pred:
mas.append(i)
st = int(input("введите количество строк\n"))
sim =len(pred)
dlin = sim // st
if sim%st !=0:
dlin=dlin+1
print("\nзашифрованая запись")
while c<st:
sh=c
while j<=dlin:
if sh <=sim-1:
print (mas[sh],end='')
else :
print(" ",end='')
sh=sh+st
j=j+1
c=c+1
j=1
if prov == 2:
mas = []
sh = 0
c = 0
i = 1
j = 1
pred = input("\nВведите предложение\n")
for i in pred:
mas.append(i)
st = int(input("Введите количество строк\n"))
sim = len(pred)
dlin = sim // st
if sim % st != 0:
dlin = dlin + 1
pog=c
print("расшифрованная запись")
while (c<sim) and (j<=sim):
print(mas[c], end='')
c=c+dlin
j=j+1
if c>=sim:
c=c-sim
if c==pog:
c=c+1
pog=c
Пример работы программы
В данном случае ни язык, ни заглавные буквы ни знаки не будут мешать выполнению программы.
Всем спасибо за внимание и удачи в ваших начинаниях.
Увидимся в следующей статье.