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.