Articulo de referencia

ROT13

ROT13 es un cifrado simple de sustitución de letras que reemplaza una letra con la decimotercera letra que le sigue en el alfabeto latino . Es un caso especial del cifrado César...

ROT13 es un cifrado simple de sustitución de letras que reemplaza una letra con la decimotercera letra que le sigue en el alfabeto latino . Es un caso especial del cifrado César , que se desarrolló en la antigua Roma y fue utilizado por Julio César en el siglo I a. C. [ 1 ] (véase la cronología de la criptografía ).

ROT13 puede denominarse Rotate13 , ROT-13 , rotar 13 posiciones o, a veces, por su nombre propio EBG13 .

Descripción

Aplicar ROT13 a un texto requiere examinar sus caracteres alfabéticos y reemplazar cada uno por la letra que se encuentra 13 posiciones más adelante en el alfabeto latino , volviendo al principio según sea necesario. [ 2 ]

Al codificar un mensaje, A se convierte en N , B en O , y así sucesivamente hasta M , que se convierte en Z. Luego, la secuencia continúa al principio del alfabeto: N se convierte en A , O en B , y así sucesivamente hasta Z , que se convierte en M. Al decodificar un mensaje, se aplican las mismas reglas de sustitución, pero esta vez sobre el texto cifrado con ROT13. Otros caracteres, como números, símbolos, signos de puntuación o espacios en blanco , permanecen sin cambios.

Debido a que hay 26 letras en el alfabeto latino básico y 26 = 2 × 13, la función ROT13 es su propia inversa : [ 2 ]

PUTREFACCIÓN13(PUTREFACCIÓN13(incógnita))=incógnita{\displaystyle {\mbox{ROT}}_{13}({\mbox{ROT}}_{13}(x))=x}para cualquier texto básico con alfabeto latinoincógnita{\displaystyle x}.

En otras palabras, dos aplicaciones sucesivas de ROT13 restauran el texto original (en matemáticas , esto a veces se denomina involución ; en criptografía, cifrado recíproco ).

La transformación se puede realizar utilizando una tabla de búsqueda , como la siguiente:

Por ejemplo, en el siguiente chiste, el remate ha sido oscurecido por ROT13:

¿Por qué cruzó la gallina la carretera?
Gb trg gb gur bgure fvqr!

Al transformar todo el texto mediante la forma ROT13, se revela la respuesta al chiste:

Jul qvq gur puvpxra pebff gur ebnq?
¡Para llegar al otro lado!

Una segunda aplicación de ROT13 restauraría el original.

Uso

ROT13 no está diseñado para usarse en entornos donde la confidencialidad sea una preocupación; el uso de un desplazamiento constante implica que el cifrado prácticamente no tiene clave , y el descifrado no requiere más información que el hecho de que se esté utilizando ROT13. Incluso sin este conocimiento, el algoritmo se puede romper fácilmente mediante análisis de frecuencia . [ 2 ]

A principios de la década de 1980, la gente usaba ROT13 en sus mensajes en los servidores de grupos de noticias de Usenet . [ 3 ] Lo hacían para ocultar chistes potencialmente ofensivos, para disimular la respuesta a un acertijo u otro spoiler , [ 4 ] o para engañar a los bots de spam menos sofisticados . ROT13 ha sido objeto de muchas bromas.

El Concurso Internacional de Código C Ofuscado (IOCCC) de 1989 incluyó una participación de Brian Westley. El programa informático de Westley puede codificarse en ROT13 o invertirse y aun así compilar correctamente. Su operación al ejecutarse consiste en aplicar codificación ROT13 o invertir su entrada. [ 5 ]

En diciembre de 1999, se descubrió que Netscape Communicator utilizaba ROT13 como parte de un esquema inseguro para almacenar contraseñas de correo electrónico. [ 6 ]

En 2001, el programador ruso Dimitry Sklyarov demostró que un proveedor de libros electrónicos, New Paradigm Research Group (NPRG), utilizaba ROT13 para cifrar sus documentos. Se ha especulado que NPRG pudo haber confundido el ejemplo de prueba de ROT13 —incluido en el kit de desarrollo de software de Adobe eBook— con un esquema de cifrado serio. [ 7 ] Windows XP utiliza ROT13 en algunas de sus claves de registro. [ 8 ] ROT13 también se utiliza en el programa fortune de Unix para ocultar citas potencialmente ofensivas.

Johann Bessler , relojero del siglo XVIII y constructor de máquinas de movimiento perpetuo , señaló que ROT13 codifica su apellido como Orffyre . Utilizó su forma latinizada , Orffyreus , como seudónimo . [ 9 ]

Cultura de red

Debido a su absoluta inadecuación para el secreto real, ROT13 se ha convertido en un término común para referirse a cualquier esquema de cifrado notablemente débil; un crítico podría afirmar que " DES de 56 bits no es mucho mejor que ROT13 hoy en día". Jugando con términos reales como doble DES, surgieron varios términos con intención humorística:

  • Doble ROT13: al aplicar ROT13 a un texto ya cifrado con ROT13, se obtiene el texto plano original .
  • ROT26: equivalente a no tener ningún tipo de cifrado.
  • 2ROT13 se incluyó en un artículo académico satírico titulado "Sobre el algoritmo de cifrado 2ROT13". [ 10 ]
  • triple-ROT13: usado en tono de broma por analogía con 3DES , es equivalente al ROT13 regular.

Los chistes de ROT13 eran populares en muchos servidores de grupos de noticias , como net.jokes, ya en la década de 1980. [ 3 ]

El grupo de noticias alt.folklore.urban acuñó una palabra —furrfu— que era la codificación ROT13 de la expresión frecuente «sheesh» . Furrfu surgió a mediados de 1992 como respuesta a las publicaciones que repetían mitos urbanos en alt.folklore.urban, después de que algunos usuarios se quejaran de que «sheesh!» como respuesta a los recién llegados se estaba usando en exceso. [ 11 ]

pares de palabras

Algunas palabras, al transformarse con ROT13, producen otra palabra. Ejemplos de pares de siete letras en inglés son abjurer y nowhere , y Chechen y purpura . Otros ejemplos de pares de palabras se muestran en la tabla. [ 12 ] El par gnat y tang es un ejemplo de palabras que son tanto recíprocas como inversas en ROT13.

Variantes y combinaciones

ROT5 es una práctica similar a ROT13 que se aplica a dígitos numéricos (del 0 al 9). ROT13 y ROT5 se pueden usar juntos en el mismo mensaje, a veces llamado ROT18 (18 = 13 + 5) o ROT13.5 .

ROT47 es un derivado de ROT13 que, además de cifrar el alfabeto latino, transforma números y símbolos comunes. En lugar de usar la secuencia A–Zcomo alfabeto, ROT47 usa un conjunto más grande de caracteres de la codificación de caracteres común conocida como ASCII . Específicamente, los caracteres imprimibles de 7 bits, excluyendo el espacio, desde el carácter 33 ( ! ) hasta el 126 ( ~ ), 94 en total, en el orden de sus códigos ASCII, se rotan 47 posiciones, sin considerar mayúsculas/minúsculas. Por ejemplo, el carácter A se asigna a p , mientras que a se asigna a 2 .

El uso de un alfabeto más extenso produce una ofuscación más completa que la de ROT13; por ejemplo, un número de teléfono como +1-415-839-6885no resulta obvio a simple vista en el resultado cifrado Z`\c`d\gbh\eggd. Por otro lado, dado que ROT47 introduce números y símbolos sin distinción, es más evidente que el texto ha sido codificado.

Ejemplo:

The Quick Brown Fox Jumps Over The Lazy Dog.

cifra a

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

La biblioteca GNU C , un conjunto de rutinas estándar disponibles para su uso en programación informática , contiene una función[ 13 ] — que tiene un propósito similar al de ROT13, aunque está diseñada para usarse con datos binarios arbitrarios . La función opera combinando cada byte con el patrón binario 00101010 (decimal 42 ) mediante la operación XOR ( o exclusivo ). Esto produce un cifrado XOR simple . Al igual que ROT13, XOR (y por lo tanto ) es autorrecíproco y proporciona un nivel de seguridad similar, prácticamente inexistente.memfrob()memfrob()

Implementación

tr

ROT13 y ROT47 son bastante fáciles de implementar usando la aplicación de terminal de Unix tr; para cifrar la cadena "Pack My Box With Five Dozen Liquor Jugs" en ROT13:

$ # Mapea la letra mayúscula AZ a N-ZA-M y la minúscula az a n-za-m $ tr 'A-Za-z' 'N-ZA-Mn-za-m' <<< "Empaca mi caja con cinco docenas de jarras de licor" Cnpx Zl Obk Jvgu Svir Qbmra Yvdhbe Whtf

y la cadena "El rápido zorro marrón salta sobre el perro perezoso" en ROT47:

$ echo "El rápido zorro marrón salta sobre el perro perezoso" | tr '\!-~' 'P-~\!-O' > %96 "F:4< qC@H? u@I yF>AD ~G6C %96 {2KJ s@8

Emacs y Vim

En Emacs , se puede ROT13 el búfer o una selección con los comandos: [ 14 ]M-x toggle-rot13-mode , , o .M-x rot13-other-windowM-x rot13-region

En el editor de texto Vim , se puede aplicar ROT13 a un buffer con el comando: [ 15 ] .ggg?G

JavaScript

Sin utilizar bibliotecas criptográficas integradas específicas ni métodos de cadena avanzados, se puede implementar manualmente una función ROT13 en JavaScript procesando los caracteres uno por uno y realizando una búsqueda y desplazamiento directo de letras: [ 16 ]

función rot13 ( str ) { const upper_case = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" . split ( "" ); const lower_case = "abcdefghijklmnopqrstuvwxyz" . split ( "" );let resultado = "" ;for ( let i = 0 ; i < str . length ; i ++ ) { const char = str [ i ];if ( upper_case . includes ( char )) { let index = upper_case . indexOf ( char ); // Rotar el índice 13 posiciones. // Si el índice está entre 0 y 12, sumar 13. Si el índice está entre 13 y 25, restar 13 let rotated_Index = index < 13 ? index + 13 : index - 13 ; result += upper_case [ rotated_Index ]; } // Comprobar si el carácter es una letra minúscula else if ( lower_case . includes ( char )) { let index = lower_case . indexOf ( char );// Rotar el índice 13 posiciones. let rotated_Index = index < 13 ? index + 13 : index - 13 ; result += lower_case [ rotated_Index ]; }// Si no es una letra, agrégala tal cual; de lo contrario , { resultado += carácter ; } }return resultado ; } // Ejemplo de uso: // console.log(rot13("¡Hola mundo!")); // Uryyb Jbeyq! // console.log(rot13("Javascript es divertido.")); // Wninfpevcg vf sha.

Pitón

El módulo codecs tiene una opción de transformación de texto "rot13" : [ 17 ]

>>> import codecs >>> print ( codecs . encode ( "The Quick Brown Fox Jumps Over The Lazy Dog" , "rot13" )) Gur Dhvpx Oebja Sbk Whzcf Bire Gur Ynml Qbt

Sin importar ninguna biblioteca, el cifrado se puede realizar creando manualmente una tabla de traducción: [ a ]

>>> def gen_rot13_table ( func = lambda x : x ): ... for c in ( ord ( "A" ), ord ( "a" )): ... for i in range ( 26 ): ... yield func ( i + c ), func (( i + 13 ) % 26 + c ) >>> table = dict ( gen_rot13_table ( chr )) >>> table {'A': 'N', 'B': 'O', 'C': 'P', 'D': 'Q', 'E': 'R', 'F': 'S', 'G': 'T', 'H': 'U', 'I': 'V', 'J': 'W', 'K': 'X', 'L': 'Y', 'M': 'Z', 'N': 'A', 'O': 'B', 'P': 'C', 'Q': 'D', 'R': 'E', 'S': 'F', 'T': 'G', 'U': 'H', 'V': 'I', 'W': 'J', 'X': 'K', 'Y': 'L', 'Z': 'M', 'a': 'n', 'b': 'o', 'c': 'p', 'd': 'q', 'e': 'r', 'f': 's', 'g': 't', 'h': 'u', 'i': 'v', 'j': 'w', 'k': 'x', 'l': 'y', 'm': 'z', 'n': 'a', 'o': 'b', 'p': 'c', 'q': 'd', 'r': 'e', ​​'s': 'f', 't': 'g', 'u': 'h', 'v': 'i', 'w': 'j', 'x': 'k', 'y': 'l', 'z': 'm'} >>> >>> s = "Quartz glyph job vext cwm porshrop finks?!" >>> print ( "" . join ( table . get ( c , c ) for c in s )) Dhnegm tylcu wbo irkg pjz cbefuebc svaxf?!

Para Python 3, se puede utilizar el método str.translate()[ 19 ] (con str.maketrans()) [ 20 ] :

>>> x,y=zip(*gen_rot13_table(chr))>>> ''.join(x)'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'>>> ''.join(y)'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm'>>> table=str.maketrans(''.join(x),''.join(y))>>> table{65: 78, 66: 79, 67: 80, 68: 81, 69: 82, 70: 83, 71: 84, 72: 85, 73: 86, 74: 87, 75: 88, 76: 89, 77: 90, 78: 65, 79: 66, 80: 67, 81: 68, 82: 69, 83: 70, 84: 71, 85: 72, 86: 73, 87: 74, 88: 75, 89: 76, 90: 77, 97: 110, 98: 111, 99: 112, 100: 113, 101: 114, 102: 115, 103: 116, 104: 117, 105: 118, 106: 119, 107: 120, 108: 121, 109: 122, 110: 97, 111: 98, 112: 99, 113: 100, 114: 101, 115: 102, 116: 103, 117: 104, 118: 105, 119: 106, 120: 107, 121: 108, 122: 109}>>>>>> print(s.translate(table))Dhnegm tylcu wbo irkg pjz cbefuebc svaxf?!

See also

Notes

  1. This source code is a slight variation of an example in Zen of Python[18]

References

  1. Kahn, David. The Codebreakers: The Story of Secret Writing. New York: Macmillan. ISBN 0-684-83130-9.
  2. 123Schneier, Bruce (1996). Applied Cryptography (Second ed.). John Wiley & Sons. pp. 11. ISBN 0-471-11709-9.
  3. 12Raymond, Eric S., ed. (29 December 2003). "ROT13". The Jargon File, 4.4.7. Archived from the original on 13 January 2012. Retrieved 19 September 2007.
  4. Hambridge, Sally (1 October 1995). "RFC 1855 - Netiquette Guidelines". Internet Engineering Task Force. Archived from the original on 2 January 2025. Retrieved 2 January 2025.
  5. Westley, Brian (1989). "westley.c" . IOCCC . Archivado del original el 9 de junio de 2012. Recuperado el 13 de agosto de 2007 .
  6. Hollebeek, Tim; Viega, John . "Criptografía deficiente en el navegador Netscape: un estudio de caso". CiteSeerX 10.1.1.15.9271 . 
  7. Perens, Bruce (1 de septiembre de 2001). "Dimitry Sklyarov: ¿Enemigo o amigo?" . ZDNet News . Archivado del original el 17 de octubre de 2014. Recuperado el 3 de febrero de 2011 .
  8. "ROT13 se usa en Windows" . Didier Stevens . 24 de julio de 2006. Archivado del original el 20 de diciembre de 2016. Consultado el 15 de diciembre de 2016 .
  9. Simanek, Donald E. (2012). "Futicidad perpetua: una breve historia de la búsqueda del movimiento perpetuo" . El Museo de los Dispositivos Inviables . Archivado del original el 10 de octubre de 2020. Recuperado el 28 de octubre de 2020 .
  10. "Sobre el algoritmo de cifrado 2ROT13" (PDF) . Prüfziffernberechnung in der Praxis. 25 de septiembre de 2004. Archivado (PDF) del original el 15 de abril de 2012. Consultado el 20 de septiembre de 2007 .
  11. "Furrfu" . Foldoc . 25 de octubre de 1995. Archivado del original el 14 de julio de 2014. Consultado el 3 de octubre de 2016 .
  12. De Mulder, Tom. "ROT13 Palabras" . Furrfu! . Archivado del original el 2 de abril de 2012. Recuperado el 19 de septiembre de 2007 .
  13. "5.13 Ofuscación de datos" . Manual de referencia de la biblioteca C de GNU . Fundación del Software Libre . 3 de diciembre de 2006. Archivado del original el 2 de agosto de 2019. Consultado el 2 de agosto de 2019 .
  14. "Rmail Rot13 – Manual de GNU Emacs" Archivado el 24 de marzo de 2016 en Wayback Machine . www.gnu.org .
  15. "Los mejores consejos de VIM, características clave de gVIM zzapper" . rayninfo.co.uk . 3 de marzo de 2016. Archivado del original el 3 de marzo de 2016.
  16. armasahar/rot13-Algorithm , 26 de septiembre de 2025 , consultado el 26 de septiembre de 2025
  17. "códecs – Registro de códecs y clases base – Documentación de Python 3.9.6" . ww6.python.org . 2 de noviembre de 2023. Archivado del original el 6 de octubre de 2020. Consultado el 7 de octubre de 2020 .
  18. this.py en GitHub
  19. "Tipos integrados str.translate(table, /)" . Documentación de Python 3 .
  20. "Tipos integrados str.maketrans" . Documentación de Python 3 .
  • Convertidor en línea para ROT13, ROT5, ROT18, ROT47, Atbash y el cifrado César.
  • Conversión de ROT13 a texto en PureTables.com
Obtenido de " https://en.wikipedia.org/w/index.php?title=ROT13&oldid=1352082019 "