En criptografía, el cifrado César es una de las técnicas más sencillas y utilizadas en el que una letra es sustituida por otra letra que se encuentra en una posición fija más adelante en el alfabeto.
Es decir, para el caso de desplazamiento a una posición “A” cambiaría a “B”, “C” a “D”, etc…
Caso práctico
Crear un algoritmo que cifre, utilizando el Cifrado César, cualquier palabra o frase utilizando un desplazamiento de 8 posiciones.
// A ==> I
// B ==> J
// C ==> K
// ...
1.- Creamos nuestra función de encriptado que acepte dos parámetros; uno para el texto y la otra para el número de posiciones a tomar en cuenta
function caesarEncryption(text, positions) {
// TODO: implement caesar encryption method
}
2.- Agregamos validaciones de escape para detener el proceso si el texto no es un string y la posición no es un número o es menor a 0
if (typeof text!== 'string' || !Number.isInteger(positions) || positions < 0) {
throw new Error('Configuración no válida')
}
3.- Generamos un array con todas las letras del alfabeto (a-z)
const alphabet = new Array(26)
.fill()
.map((_, index) => String.fromCharCode(97 + index))
4.- Mapemos el alfabeto con la nueva letra considerando la posición obtenida como parametro
const cipherMap = alphabet.reduce(
(map, char, index) => map.set(char, alphabet[(positions + index) % 26]),
new Map()
)
5.- Reemplazamos la letra original por la obtenida en el mapa generado anteriormente y retornamos la cadena completa
return str.replace(/[a-z]/gi, (char) => {
if (/[A-Z]/.test(char)) {
return cipherMap.get(char.toLowerCase()).toUpperCase()
}
return cipherMap.get(char)
})
De tal manera que si ejecutamos el código nos debería arrojar lo siguiente
caesarEncrypt("Hola mundo", 8)
// PWTI UCVLW
caesarEncrypt("Odio javascript", 8)
// Wlqw ridiakzqxb
Próximamente actualizaremos para hacer el desencriptado