Криптография с Python - Caesar Cipher
В последней главе мы рассмотрели обратный шифр. В этой главе подробно рассказывается о шифре Цезаря.
Алгоритм шифра Цезаря
Алгоритм шифра Цезаря имеет следующие особенности:
Caesar Cipher Technique - простой и легкий метод техники шифрования.
Это простой тип подстановочного шифра.
Каждая буква обычного текста заменяется буквой с фиксированным числом позиций вниз по алфавиту.
На следующей диаграмме показана работа реализации алгоритма шифрования Цезаря -
Программная реализация алгоритма шифра Цезаря выглядит следующим образом:
def encrypt(text,s):
result = ""
# transverse the plain text
for i in range(len(text)):
char = text[i]
# Encrypt uppercase characters in plain text
if (char.isupper()):
result += chr((ord(char) + s-65) % 26 + 65)
# Encrypt lowercase characters in plain text
else:
result += chr((ord(char) + s - 97) % 26 + 97)
return result
#check the above function
text = "CEASER CIPHER DEMO"
s = 4
print "Plain Text : " + text
print "Shift pattern : " + str(s)
print "Cipher: " + encrypt(text,s)
Вывод
Вы можете увидеть шифр Цезаря, это результат, как показано на следующем изображении -
Объяснение
Символы обычного текста просматриваются по одному.
Для каждого символа в данном простом тексте преобразовать данный символ в соответствии с правилом в зависимости от процедуры шифрования и дешифрования текста.
После выполнения этих шагов создается новая строка, которая называется зашифрованным текстом.
Взлом алгоритма шифрования Цезаря
Шифрованный текст можно взломать различными способами. Одна из таких возможностей -Brute Force Technique,который включает в себя проверку всех возможных ключей дешифрования. Этот прием не требует больших усилий и относительно прост для хакера.
Программная реализация алгоритма взлома шифра Цезаря выглядит следующим образом:
message = 'GIEWIVrGMTLIVrHIQS' #encrypted message
LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for key in range(len(LETTERS)):
translated = ''
for symbol in message:
if symbol in LETTERS:
num = LETTERS.find(symbol)
num = num - key
if num < 0:
num = num + len(LETTERS)
translated = translated + LETTERS[num]
else:
translated = translated + symbol
print('Hacking key #%s: %s' % (key, translated))
Рассмотрим зашифрованный текст, зашифрованный в предыдущем примере. Затем вывод с возможными методами взлома с помощью ключа и использованием техники атаки грубой силы выглядит следующим образом: