El algoritmo ROT 13 es una variante del cifrado César (cuya implementación en Ruby ya vimos) en donde el número de rotaciones es 13; la mitad de la cantidad de letras que existen en el alfabeto inglés o como se le diga.
Algoritmo ROT 13 en Ruby
Hoy veremos cómo implementar una función que codifique y decodifique una cadena usando el algoritmo ROT 13 en el lenguaje de programación Ruby.
Ejemplo de ROT 13
Para dar una explicación rápida, la palabra “Hola” se convierte en “Ubyn” porque cada letra se mueve 13 posiciones. De igual manera, al rotar de nuevo la palabra “Ubyn” se convierte en “Hola”.
ROT 13 en Ruby
Esta es una simple variante del algoritmo César; pues rota 13 veces. Debido a que 13 es la mitad de 26, y 26 son las letras del alfabeto inglés, la misma función que codifica puede decodificar.
Por lo tanto la función queda así:
$alfabeto_mayusculas="ABCDEFGHIJKLMNOPQRSTUVWXYZ"$alfabeto_minusculas="abcdefghijklmnopqrstuvwxyz"$longitud_alfabeto=26$limite_inferior_mayusculas=65$limite_inferior_minusculas=97=begin"Cifrar" y "Descifrar" una cadena con ROT13, una variante
del cifrado César.El método funciona tanto para codificar como
para decodificar.@author parzibyte
=enddefrot_13(cadena)
cadena_con_rotaciones =""# Ir letra por letra...for letra in cadena.chars
# Si no es una letra (es un espacio, punto, etcétera) entonces# no la rotamos ni cambiamos, ponemos el carácter así como esif!letra.match(/^[[:alpha:]]$/)
cadena_con_rotaciones += letra
nextend# Suponemos que la letra es mayúscula
alfabeto =$alfabeto_mayusculas
limite =$limite_inferior_mayusculas# Pero comprobamos y cambiamos si es necesarioif letra == letra.downcase # ¿Es minúscula?
alfabeto =$alfabeto_minusculas
limite =$limite_inferior_minusculasend
valor_ascii = letra.ord
# Rotar
nueva_posicion =(valor_ascii - limite +13)%$longitud_alfabeto# Y ver cuál carácter está en esa posición
cadena_con_rotaciones += alfabeto[nueva_posicion]end# Regresar nueva cadena
cadena_con_rotaciones
end
mensaje ="Programando en Ruby desde parzibyte.me"
puts "El mensaje original es '#{mensaje}'"# El mensaje original es 'Programando en Ruby desde parzibyte.me'
mensaje_cifrado = rot_13 mensaje
puts "El mensaje cifrado es '#{mensaje_cifrado}'"# El mensaje cifrado es 'Cebtenznaqb ra Ehol qrfqr cnemvolgr.zr'
mensaje_descifrado = rot_13 mensaje_cifrado
puts "El mensaje descifrado es '#{mensaje_descifrado}'"# El mensaje descifrado es 'Programando en Ruby desde parzibyte.me'
Recibe una cadena y regresa una cadena. No importa si la cadena ya está cifrada o está en texto plano, pues siempre rota 13 veces y por lo tanto, si ya está cifrada, la descifra; y si no, entonces la cifra.
Nota: esto seguramente ya lo saben todos pero no está de más repetirlo: ROT13 y César no son cifrados seguros, nunca se deben usar si no es para propósitos educativos.
Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto
No te pierdas ninguno de mis posts
Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
Anteriormente vimos el cifrado César en C y el cifrado César en Python. No explicaré detalladamente cómo funciona el algoritmo pues a ello ya le dediqué otro post. Lo que nos reúne aquí hoy es la implementación del algoritmo de "cifrado" César en el lenguaje de programación Ruby. Al final…
En este post vamos a ver cómo implementar el algoritmo de cifrado César en Java. Vamos a hacer el algoritmo que codifica y decodifica usando el cifrado César. En caso de que tú no sepas lo que es el cifrado César o quieres ver una explicación más detallada te invito…
Hoy voy a explicar el código fuente para implementar el algoritmo de cifrado ROT 13 en Java. El método de cifrado llamado ROT 13 rota las letras del alfabeto 13 posiciones. Son 13 veces porque 13 es la mitad de la longitud del alfabeto inglés (es decir, 26). Debido a…