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')