b'\n_START_ARTICLE_\nROT13\n_START_PARAGRAPH_\nROT13 (\xc2\xabrotar 13 posiciones\xc2\xbb, a veces con un guion: ROT-13) es un sencillo cifrado C\xc3\xa9sar utilizado para ocultar un texto sustituyendo cada letra por la letra que est\xc3\xa1 trece posiciones por delante en el alfabeto. A se convierte en N, B se convierte en O y as\xc3\xad hasta la M, que se convierte en Z. Luego la secuencia se invierte: N se convierte en A, O se convierte en B y as\xc3\xad hasta la Z, que se convierte en M. Este algoritmo se utiliza en foros de Internet como medio para ocultar de miradas casuales el final de un chiste, la soluci\xc3\xb3n a un acertijo, el destripe de una pel\xc3\xadcula o una historia, o alg\xc3\xban texto ofensivo. ROT13 se ha descrito como el \xc2\xabequivalente en Usenet de una revista que imprime bocabajo la respuesta a un pasatiempo\xc2\xbb.\xe2\x80\x8b_NEWLINE_El nombre \xc2\xabROT13\xc2\xbb se origin\xc3\xb3 en Usenet a principios de los a\xc3\xb1os 1980, y el m\xc3\xa9todo se ha convertido en un est\xc3\xa1ndar de facto. Al igual que el cifrado de C\xc3\xa9sar (un m\xc3\xa9todo de cifrado con miles de a\xc3\xb1os), el ROT13 no proporciona seguridad criptogr\xc3\xa1fica real y no se usa para tales fines; de hecho, a menudo se emplea como ejemplo can\xc3\xb3nico de cifrado d\xc3\xa9bil. Otra caracter\xc3\xadstica de este cifrado es que se trata de un cifrado rec\xc3\xadproco, para deshacer el ROT13 se aplica el mismo algoritmo, de manera que para cifrar y descifrar se puede utilizar el mismo c\xc3\xb3digo._NEWLINE_Se puede clasificar dentro de los cifrados sim\xc3\xa9tricos, luego se emplea la misma clave para cifrar y para descifrar.\n_START_SECTION_\nROT13 como m\xc3\xa9todo de cifrado\n_START_PARAGRAPH_\nROT13 pertenece a un conjunto de algoritmos de cifrado conocidos como cifrados C\xc3\xa9sar, que son a su vez un tipo especialmente simple de cifrado por sustituci\xc3\xb3n. El ROT13 no est\xc3\xa1 pensado para los casos en los que el secreto tiene alguna importancia: el uso de un desplazamiento constante significa que el cifrado no tiene clave, y el descifrado no requiere m\xc3\xa1s conocimiento que el hecho de que se est\xc3\xa1 usando el m\xc3\xa9todo ROT13. Incluso sin este conocimiento, como con cualquier cifrado por sustituci\xc3\xb3n, el algoritmo se puede romper f\xc3\xa1cilmente por an\xc3\xa1lisis de frecuencias o mediante la explotaci\xc3\xb3n de palabras patr\xc3\xb3n (el ROT13 es un ejemplo de lo que Bruce Schneier llama \xc2\xabcifrado para la hermana peque\xc3\xb1a\xc2\xbb: como mucho servir\xc3\xa1 para mantener en secreto un documento contra tu hermana peque\xc3\xb1a)._NEWLINE_El efecto real del ROT13 es simplemente asegurarse de que el lector de un mensaje tenga que descifrarlo conscientemente, lo que normalmente suele implicar ejecutar el comando en cuesti\xc3\xb3n en el software que lee el mensaje. En lugar de proteger un mensaje confidencial de los lectores no autorizados, el ROT13 salvaguarda a los lectores autorizados del material que pueden no querer leer involuntariamente, como los spoilers en una cr\xc3\xadtica de un libro o una pel\xc3\xadcula._NEWLINE_Debido a su completa inutilidad para una verdadera confidencialidad, el ROT13 se ha convertido en un eslogan para referirse a cualquier sistema de cifrado visiblemente d\xc3\xa9bil; un cr\xc3\xadtico podr\xc3\xada decir que \xc2\xabel DES de 56 bits es poco mejor que el ROT13 en estos d\xc3\xadas\xc2\xbb. Adem\xc3\xa1s, en juego con t\xc3\xa9rminos reales como \xc2\xabDES doble\xc2\xbb, surgen t\xc3\xa9rminos como ROT13 doble, ROT26 o 2ROT13 con intenciones jocosas, incluyendo un art\xc3\xadculo acad\xc3\xa9mico par\xc3\xb3dico titulado "Sobre el algoritmo de cifrado 2ROT13".\xe2\x80\x8b Como se explica arriba, aplicar el ROT13 a un texto que ya est\xc3\xa1 cifrado con ROT13 recupera el texto en claro original, de manera que el ROT26 es equivalente a no cifrar en absoluto._NEWLINE_La idea del ROT26 se ha utilizado como una pulla sat\xc3\xadrica contra la Acta de derechos de autor Milenio Digital (DMCA) estadounidense; algunos usuarios de Internet firman sus mensajes en los foros con frases como \xc2\xabCodificado con ROT26: \xc2\xa1los intentos de saltarse la protecci\xc3\xb3n ser\xc3\xa1n perseguidos!\xc2\xbb (el DMCA introdujo la prohibici\xc3\xb3n general de saltarse los sistemas de protecci\xc3\xb3n de copia, sistemas que a menudo se descubre que internamente emplean m\xc3\xa9todos lamentablemente inseguros de criptograf\xc3\xada). Tambi\xc3\xa9n se pueden observar menciones al \xc2\xabROT13 triple\xc2\xbb, que, por supuesto, es equivalente al ROT13 normal (el t\xc3\xa9rmino procede probablemente del Triple DES)._NEWLINE_En 2001, el criptoanalista ruso Dmitry Sklyarov fue arrestado tras detallar las debilidades de los sistemas de protecci\xc3\xb3n de copia de los ebooks. Un vendedor de libros electr\xc3\xb3nicos, New Paradigm Research Group (NPRG), utiliz\xc3\xb3 de hecho el ROT13 para cifrar sus documentos. Se especula que NPRG puede haber confundido un ejemplo de juguete \xe2\x80\x94incluido en el kit de desarrollo de libros electr\xc3\xb3nicos de Adobe\xe2\x80\x94 con un sistema de cifrado serio.\xe2\x80\x8b\n_START_SECTION_\nVariantes\n_START_PARAGRAPH_\nHay otros sistemas de ofuscaci\xc3\xb3n poco utilizados con prop\xc3\xb3sitos similares al ROT13. ROT13 s\xc3\xb3lo maneja letras y deja intactos el resto de caracteres, como los signos de puntuaci\xc3\xb3n, los n\xc3\xbameros y los espacios en blanco. A causa de esto, el ROT13 es inapropiado para algunos prop\xc3\xb3sitos, por ejemplo, ocultar la respuesta num\xc3\xa9rica de un enigma o manejar datos binarios arbitrarios.\n_START_SECTION_\nmemfrob()\n_START_PARAGRAPH_\nLa librer\xc3\xada de C de GNU (un conjunto de rutinas est\xc3\xa1ndar para su uso en programaci\xc3\xb3n inform\xc3\xa1tica) contiene una funci\xc3\xb3n \xe2\x80\x94 memfrob()\xe2\x80\x8b \xe2\x80\x94 que tiene el mismo objetivo que el ROT13, aunque est\xc3\xa1 destinada para usarla con datos binarios arbitrarios. La funci\xc3\xb3n trabaja combinando cada byte con la secuencia binaria 00101010 (42 en decimal) utilizando la operaci\xc3\xb3n o exclusivo (XOR). Esto efect\xc3\xbaa un cifrado XOR sencillo. Al igual que el ROT13, memfrob() es autorrec\xc3\xadproco; tambi\xc3\xa9n es igual de inseguro (es decir, es igual de trivial descifrarlo sin conocer la clave).\n_START_SECTION_\nImplementaci\xc3\xb3n en C de ROT13\n_START_PARAGRAPH_\nUna posible implementaci\xc3\xb3n en C, para codificaci\xc3\xb3n ASCII, ser\xc3\xada la siguiente._NEWLINE_char* rot13(char *p){_NEWLINE_    size_t i;_NEWLINE_    char c;_NEWLINE__NEWLINE_    for (i = 0; p[i] != \'\\0\'; ++i) {_NEWLINE_        switch (p[i]) {_NEWLINE_            case \'A\' ... \'Z\':_NEWLINE_                c = \'A\'; //Escoge el abecedario de may\xc3\xbasculas._NEWLINE_                break;_NEWLINE_            case \'a\' ... \'z\':_NEWLINE_                c = \'a\'; //Escoge el abecedario de min\xc3\xbasculas._NEWLINE_                break;_NEWLINE_            default:_NEWLINE_                continue;_NEWLINE_        }_NEWLINE__NEWLINE_        /*  p[i] - c               : Consigue indice en el abecedario.  Ej: A->0,  Z->25, N->13         *  p[i] - c + 13          : Mueve el indice 13 posiciones.     Ej: A->13, Z->38, N->26         * (p[i] - c + 13) % 26    : Rota las posiciones.               Ej: A->13, Z->12, N->0         * (p[i] - c + 13) % 26 + c: Convierte el indice al abecedario. Ej: A->N,  Z->M,  N->A         */_NEWLINE__NEWLINE_        c = (p[i] - c + 13) % 26 + c;_NEWLINE_        p[i] = c;_NEWLINE_    }_NEWLINE__NEWLINE_    return p;}_NEWLINE_En esta implementaci\xc3\xb3n se obvian las letras que no est\xc3\xa1n en el alfabeto de ASCII no se reemplazan.\n_START_SECTION_\nImplementaci\xc3\xb3n en VB de ROT47\n_START_PARAGRAPH_\nUna posible implementaci\xc3\xb3n de ROT47 en VB6. El cifrado queda claramente expuesto en el bucle._NEWLINE_Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Public Function Rot47(ByVal Texto As String) As String_NEWLINE_    Dim n() As Integer, max As Long, k As Long, t As Integer_NEWLINE_    _NEWLINE_    If Texto <> "" Then_NEWLINE_        max = Len(Texto)_NEWLINE_        ReDim n(0 To max - 1)_NEWLINE_        Call CopyMemory(ByVal VarPtr(n(0)), ByVal StrPtr(Texto), max * 2)_NEWLINE_    _NEWLINE_        For k = 0 To max - 1_NEWLINE_            t = n(k)_NEWLINE_            If t > 32 And t < 127 Then           _NEWLINE_                If t < 80 Then_NEWLINE_                    n(k) = t + 47_NEWLINE_                Else_NEWLINE_                    n(k) = t - 47_NEWLINE_                End If_NEWLINE_            End If_NEWLINE_        Next_NEWLINE__NEWLINE_        Call CopyMemory(ByVal StrPtr(Texto), ByVal VarPtr(n(0)), max * 2)_NEWLINE_        Erase n_NEWLINE_    End If_NEWLINE_    _NEWLINE_    Rot47 = TextoEnd Function_NEWLINE_Debe notarse que se pasa la cadena de texto a una matriz para ganar en velocidad de c\xc3\xa1lculo y finalmente se deposita en la cadena de texto. Igualmente debe notarse que se pasa a una matriz de enteros debido a la codificaci\xc3\xb3n de 2 bytes por car\xc3\xa1cter, si se opera con 1 byte por car\xc3\xa1cter debe usarse una matriz de bytes y copiar solo max bytes y no max * 2 bytes.'