ROT13 - ROT13

ROT13 substitui cada letra por seu parceiro 13 caracteres mais adiante no alfabeto. Por exemplo, HELLOtorna-se URYYB(ou, inversamente, URYYBtorna HELLO- se novamente).

ROT13 (" girar em 13 casas ", às vezes com hifenização ROT-13 ) é uma cifra de substituição de letra simples que substitui uma letra pela 13ª letra após ela no alfabeto. ROT13 é um caso especial da cifra de César que foi desenvolvida na Roma antiga.

Como existem 26 letras (2 × 13) no alfabeto latino básico , ROT13 é seu próprio inverso ; ou seja, para desfazer ROT13, o mesmo algoritmo é aplicado, de modo que a mesma ação pode ser usada para codificação e decodificação. O algoritmo não fornece virtualmente nenhuma segurança criptográfica e é freqüentemente citado como um exemplo canônico de criptografia fraca.

ROT13 é usado em fóruns online como um meio de esconder spoilers , piadas , soluções de quebra-cabeças e materiais ofensivos do olhar casual. ROT13 inspirou uma variedade de jogos de letras e palavras online e é freqüentemente mencionado em conversas de grupos de notícias .

Descrição

Aplicar ROT13 a um pedaço de texto requer apenas o exame de seus caracteres alfabéticos e a substituição de cada um pela letra 13 lugares mais adiante no alfabeto , voltando ao início, se necessário. Atorna-se N, Btorna-se O, e assim por diante até M, que se torna Z, então a sequência continua no início do alfabeto: Ntorna - se A, O torna-se B, e assim por diante Z, até que se torna M. Apenas as letras que ocorrem no alfabeto inglês são afetadas; números, símbolos, espaços em branco e todos os outros caracteres permanecem inalterados. Como existem 26 letras no alfabeto inglês e 26 = 2 × 13, a função ROT13 é seu próprio inverso :

para qualquer texto básico do alfabeto latino x .

Em outras palavras, duas aplicações sucessivas de ROT13 restauram o texto original (em matemática , isso às vezes é chamado de involução ; em criptografia, uma cifra recíproca ).

A transformação pode ser feita usando uma tabela de pesquisa , como a seguinte:

Entrada ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Saída NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm

Por exemplo, na seguinte piada, a piada foi obscurecida por ROT13:

Por que a galinha atravessou a estrada?
Gb trg gb gur bgure fvqr!

Transformando todo o texto via formulário ROT13, a resposta à piada é revelada:

Jul qvq gur puvpxra pebff gur ebnq?
Para chegar ao outro lado!

Uma segunda aplicação de ROT13 restauraria o original.

Uso

ROT13 é um caso especial do algoritmo de criptografia conhecido como cifra de César , usado por Júlio César no século 1 aC.

Johann Ernst Elias Bessler , um relojoeiro do século 18 e construtor de máquinas de movimento perpétuo , apontou que ROT13 codifica seu sobrenome como Orffyre . Ele usou sua latinizada forma, Orffyreus , como seu pseudônimo.

ROT13 estava em uso no grupo de notícias net.jokes no início dos anos 1980. É usado para ocultar piadas potencialmente ofensivas ou para obscurecer uma resposta a um quebra-cabeça ou outro spoiler . Uma mudança de treze foi escolhida em vez de outros valores, como três como na cifra de César original , porque treze é o valor para o qual a codificação e a decodificação são equivalentes, permitindo assim a conveniência de um único comando para ambos. ROT13 é normalmente suportado como um recurso integrado ao software de leitura de notícias. Os endereços de e-mail às vezes também são codificados com ROT13 para ocultá-los de robôs de spam menos sofisticados . Ele também é usado para contornar a triagem de e-mail e filtragem de spam. Ao obscurecer o conteúdo de um e-mail, o algoritmo de triagem não consegue identificar o e-mail como, por exemplo, um risco à segurança e permite que ele entre na caixa de entrada do destinatário.

Em texto criptografado normal no idioma inglês de qualquer tamanho significativo, ROT13 é reconhecível por alguns padrões de letras / palavras. As palavras "n", "V" (letras maiúsculas apenas) e "gur" (ROT13 para "a", "I" e "o") e palavras que terminam em "yl" ("ly") são exemplos.

O ROT13 não se destina a ser usado onde o sigilo é uma preocupação - o uso de uma mudança constante significa que a criptografia efetivamente não tem chave e a descriptografia não requer mais conhecimento do que o fato de que o ROT13 está em uso. Mesmo sem esse conhecimento, o algoritmo é facilmente quebrado por meio da análise de frequência . Por causa de sua total inadequação para sigilo real, ROT13 se tornou uma frase de efeito para se referir a qualquer esquema de criptografia visivelmente fraco ; um crítico pode afirmar que "o DES de 56 bits é um pouco melhor do que o ROT13 atualmente". Além disso, em um jogo com termos reais como "double DES", os termos "double ROT13", "ROT26" ou "2ROT13" surgem com intenção humorística (devido ao fato de que, desde a aplicação de ROT13 a um já criptografado ROT13 texto restaura o texto simples original , ROT26 é equivalente a nenhuma criptografia), incluindo um artigo acadêmico paródia intitulado "On the 2ROT13 Encryption Algorithm". Por extensão, triplo ROT13 (usado em analogia com 3DES) é equivalente ao ROT13 regular.

Em dezembro de 1999, foi descoberto que o Netscape Communicator usava o ROT13 como parte de um esquema inseguro para armazenar senhas de e-mail. Em 2001, o programador russo Dimitry Sklyarov demonstrou que um fornecedor de e-books, o New Paradigm Research Group (NPRG), usava ROT13 para criptografar seus documentos; especula-se que o NPRG pode ter confundido o exemplo do brinquedo ROT13 - fornecido com o kit de desenvolvimento de software Adobe eBook - com um esquema de criptografia sério. O Windows XP usa ROT13 em algumas de suas chaves de registro. ROT13 também é usado no programa fortuna do Unix para ocultar dicta potencialmente ofensiva.

Jogos de cartas e cultura online

abcdefghijklmnopqrstuvwxyz
NOPQRSTUVWXYZABCDEFGHIJKLM
ahanun antnag
balkonyx barone
barfones beor
binova ebbsroof
envyrail erre
errsreef flapsync
furshe geltry
gnattang irkvex
clerkpyrex purelycheryl
PNGcat SHAfun
furbysheol terragreen
whatJung URLhey
purpuraChechen shoneFUBAR
AresNerf abjurernowhere

ROT13 oferece uma oportunidade para jogos de letras . Algumas palavras, quando transformadas com ROT13, produzirão outra palavra. Exemplos de pares de 7 letras no idioma inglês são abjur e lugar nenhum , e checheno e púrpura . Outros exemplos de palavras como essas são mostrados na tabela. O par gnat e tang é um exemplo de palavras que são recíprocas e reversas ROT13.

O Concurso Internacional de Código C Ofuscado de 1989 (IOCCC) incluiu uma inscrição de Brian Westley. O programa de computador de Westley pode ser codificado em ROT13 ou revertido e ainda assim compilar corretamente. Sua operação, quando executada, é realizar a codificação ROT13 ou reverter sua entrada.

O grupo de notícias alt.folklore.urban cunhou uma palavra - furrfu - que era a codificação ROT13 do enunciado frequentemente codificado " sheesh ". " Furrfu" evoluiu em meados de 1992 como uma resposta a postagens que repetiam mitos urbanos em alt.folklore.urban, depois que alguns postadores reclamaram que "Sheesh!" como uma resposta aos recém - chegados estava sendo usado em demasia.

Variantes

ROT5 é uma prática semelhante a ROT13 que se aplica a dígitos numéricos (0 a 9). ROT13 e ROT5 podem ser usados ​​juntos na mesma mensagem, às vezes chamado de ROT18 (18 = 13 + 5) ou ROT13.5.

ROT47 é um derivado de ROT13 que, além de embaralhar as letras básicas, trata números e símbolos comuns. Em vez de usar a sequência A–Zcomo o alfabeto, ROT47 usa um conjunto maior de caracteres da codificação de caracteres comum conhecida como ASCII . Especificamente, os caracteres imprimíveis de 7 bits, excluindo espaço, do decimal 33 ' !' a 126 ' ~', 94 no total, tomados na ordem dos valores numéricos de seus códigos ASCII, são girados em 47 posições, sem consideração especial do caso . Por exemplo, o personagem Aé mapeado para p, enquanto aé mapeado para 2. O uso de um alfabeto maior produz uma ofuscação mais completa do que a do ROT13; por exemplo, um número de telefone que +1-415-839-6885não é óbvio à primeira vista pelo resultado embaralhado Z`\c`d\gbh\eggd. Por outro lado, como o ROT47 introduz números e símbolos na mistura sem discriminação, é mais imediatamente óbvio que o texto foi cifrado.

Exemplo:

The Quick Brown Fox Jumps Over The Lazy Dog.

codificações para

%96 "F:4< qC@H? u@I yF>AD ~G6C %96 {2KJ s@8]

A biblioteca GNU C , um conjunto de rotinas padrão disponíveis para uso em programação de computador , contém uma função - que tem uma finalidade semelhante a ROT13, embora seja destinada ao uso com dados binários arbitrários. A função opera combinando cada byte com o padrão binário 00101010 ( 42 ) usando a operação exclusiva ou (XOR). Isso efetua uma cifra XOR simples . Como ROT13, XOR (e portanto ) é auto-recíproco e fornece um nível de segurança semelhante, virtualmente ausente. memfrob()memfrob()

Implementação

tr

O ROT13 e o ROT47 são bastante fáceis de implementar usando o aplicativo de terminal Unix tr; para criptografar a string "Raposa marrom rápida salta sobre o cachorro preguiçoso" em ROT13:

$ # Map upper case A-Z to N-ZA-M and lower case a-z to n-za-m
$ tr 'A-Za-z' 'N-ZA-Mn-za-m' <<< "The Quick Brown Fox Jumps Over The Lazy Dog"
Gur Dhvpx Oebja Sbk Whzcf Bire Gur Ynml Qbt

e a mesma string para ROT47:

$ echo "The Quick Brown Fox Jumps Over The Lazy Dog" | tr '\!-~' 'P-~\!-O'
%96 "F:4< qC@H? u@I yF>AD ~G6C %96 {2KJ s@8

Emacs e Vim

No Emacs , pode-se ROT13 o buffer ou uma seleção com os seguintes comandos:

M-x toggle-rot13-mode
M-x rot13-other-window
M-x rot13-region

e no editor de texto Vim , pode-se ROT13 um buffer com o comando:

ggg?G

Pitão

Em Python , o módulo este é implementado usando ROT13:

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

>>> with open(this.__file__) as f:
...     print(f.read())
s = """Gur Mra bs Clguba, ol Gvz Crgref

Ornhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
Fvzcyr vf orggre guna pbzcyrk.
Pbzcyrk vf orggre guna pbzcyvpngrq.
Syng vf orggre guna arfgrq.
Fcnefr vf orggre guna qrafr.
Ernqnovyvgl pbhagf.
Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.
Nygubhtu cenpgvpnyvgl orngf chevgl.
Reebef fubhyq arire cnff fvyragyl.
Hayrff rkcyvpvgyl fvyraprq.
Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.
Abj vf orggre guna arire.
Nygubhtu arire vf bsgra orggre guna *evtug* abj.
Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.
Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.
Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""

d = {}
for c in (65, 97):
    for i in range(26):
        d[chr(i+c)] = chr((i+13) % 26 + c)

print("".join([d.get(c, c) for c in s]))

Os codecs do módulo fornecem a transformação de texto 'rot13' .

>>> import codecs
>>> print(codecs.encode(this.s, 'rot13'))
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Veja também

Referências