ROT13
Алгоритм ROT13 (іноді через дефіс — ROT-13) — простий буквений підстановочний шифр, який заміняє літеру 13 буквою в абетці після неї. ROT-13 є різновидом шифру Цезаря, розробленого в Стародавньому Римі.
Оскільки у базовій латинській абетці є 26 букв (2×13), то ROT13 є зворотним, тобто, щоб декодувати ROT13, застосовується один і той же алгоритм, тому одна і та ж дія може бути використаною для кодування і декодування. Алгоритм не забезпечує практично ніякої криптографічної безпеки й часто наводиться як типовий приклад слабкого шифрування.[1]
ROT13 використовується на інтернет-форумах , як засіб для приховування спойлерів, реплік, вирішень головоломок та образливих матеріалів від випадкового погляду. ROT13 вважають «юзнетовим еквівалентом друкування в журналах відповідей на головоломки в перевернутому вигляді». ROT13 надихнув до створення різноманітних буквених і словесних мережевих ігор, а також часто використовується в бесідах груп новин.
Опис
Перетворення може бути зроблено за допомогою таблиці підстановки:
Вхід | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |
Вихід | NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm |
Наприклад, в наступному анекдоті, кінцівка була закрита за допомогою алгоритму rot13:
Why did the chicken cross the road? Gb trg gb gur bgure fvqr!
Перетворивши весь текст за допомогою алгоритму rot13, виявляємо відповідь на жарт:
Jul qvq gur puvpxra pebff gur ebnq? To get to the other side!
Python 2.7.13
# -*- coding: cp1251 -*-
#rot13 converter
print "Ласкаво просимо до Python ROT13\n\n"
alpha = "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя "
#string = "Fraq hf gur pbqr lbh hfrq gb qrpbqr guvf zrffntr"
def rot13decoder():
string = raw_input('Будь ласка, введіть повідомлення rot13 для декодування: \n')
dic = {}
count = 1
for i in alpha:
dic[i] = count
count+=1
message = ""
for i in string:
if i.lower() in dic:
rot = int(dic[i.lower()]) - 13
if rot == 14:
message+=' '
elif rot < 1:
base = 32
newrot = base + rot
message+=dic.keys()[dic.values().index(newrot)]
else:
message+=dic.keys()[dic.values().index(rot)]
print '\nПовідомлення розшифровано: \n'+message+'\n\nСподіваюся, що вам сподобалося!!'
def rot13encoder():
string = raw_input('Будь-ласка, введіть повідомлення для кодування рот13: \n')
dic = {}
count = 1
for i in alpha:
dic[i] = count
count+=1
message = ""
for i in string:
if i.lower() in dic:
rot = int(dic[i.lower()]) + 13
if rot == 40:
message+=' '
elif rot > 32:
rot = rot - 32
base = 0
newrot = base + rot
message+=dic.keys()[dic.values().index(newrot)]
else:
message+=dic.keys()[dic.values().index(rot)]
print '\nПовідомлення, закодоване на: \n'+message+'\n\nСподіваюся, що вам сподобалося'
endecode = raw_input('1) Введіть 1, щоб кодувати повідомлення\n2) Введіть 2 для розшифрування повідомлення\n')
while endecode != '1' or endecode != '2':
if endecode == '1':
rot13encoder()
break
elif endecode == '2':
rot13decoder()
break
else:
endecode = raw_input('1) 1) Введіть 1, щоб кодувати повідомлення\n2) Введіть 2 для розшифрування повідомлення\n')
Посилання
- Christopher Swenson (17 березня 2008). Modern Cryptanalysis: Techniques for Advanced Code Breaking. John Wiley & Sons. с. 5. ISBN 9780470135938.