martes, 1 de septiembre de 2020

JavaScript: cifrado de corrimiento de clave

Aquí tienes el cifrado de corrimiento de clave programado en JavaScript para que puedas usarlo sin tener que recurrir a papel y lápiz. Escribe el mensaje y la clave que deseas utilizar (todos los caracteres que no sean letras serán ignorados) y desmarca la casilla si deseas descifrar o déjala marcada si quieres cifrar.

He dejado el código utilizado más abajo por si estás interesado. Al principio, se define el alfabeto castellano con la Ñ. Simplemente cambiando esa línea, se podría utilizar cualquier otro alfabeto (incluso uno inventado).

TEXTO  CLAVE  CIFRAR




var alphabet = "ABCDEFGHIJKLMN\u00D1OPQRSTUVWXYZ";

function cipher(text, keyString, isCipher, alph){
  //First step: get the key as a list of numbers.
  var key = keyToNumbersList(keyString);

  //Second step: if the key is shorter than the message, keep repeating it.
  var cloneKey = key.slice(0); //clone the list.
  var len = text.length;
  while(key.length < len){
    key.push.apply(key, cloneKey); //Append all the elements in cloneKey to key.
  }
  //Third step: add the key.
  var result = addKey(text, key, isCipher, alph);
  return result;
}

function addKey(text, key, isCipher, alph){
  //This method adds the key (a list of numbers in the form of string) to the text.
  var temp, plainLetter, result = "", keyNumber, i;
  var len = text.length, alphlen = alph.length;
  for(i = 0; i < len; i++){
    plainLetter = text.charAt(i);
    temp = alph.indexOf(plainLetter) + 1;
    keyNumber = key[i];
    if(isCipher){
	  temp += keyNumber;
	}else{
      temp -= keyNumber;
    }
	temp %= alphlen;
    if(temp <= 0){
	  temp += alphlen;
    }
    result += alph.charAt(temp-1);
  }
  return result;   
}

function keyToNumbersList(keyString){
  //This method takes a string and changes the letters into numbers, returning a list.
  var result = [], length = keyString.length, i;
  for(i = 0; i < length; i++){
    result.push(alphabet.indexOf(keyString.charAt(i)) + 1);
  }
  return result;
}

No hay comentarios:

Publicar un comentario