Перейти до вмісту

ROT13

Матеріал з Вікіпедії — вільної енциклопедії.
Алгоритм ROT13 замінює кожну букву свого на 13 знаків далі за алфавітом. Наприклад, "HELLO" стає URYYB (або, назад, URYYB стає HELLO знову).

Алгоритм 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')

Посилання

[ред. | ред. код]
  1. Christopher Swenson (17 березня 2008). Modern Cryptanalysis: Techniques for Advanced Code Breaking. John Wiley & Sons. с. 5. ISBN 9780470135938. Архів оригіналу за 24 червня 2016. Процитовано 9 лютого 2017.