Categorías
Algoritmos

Cifrado César en Javascript

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *