javascript – Caesar cipher converting to ASCII

Question:

I am making an HTML page that uses JavaScript . What you do is you enter a text and encrypt it with Caesar, and then convert it to ASCII .

The problem is that I cannot decrypt the already encrypted text.

function Codifica(Descifra)
{
  var Desplazar = document.getElementById("cambios").value;
  if (!/^(\+|\-)?\d+$/.test(Desplazar)) {
    alert("No es un número entero");
    return;
  }
  var Des = parseInt(Desplazar, 10);
  if (Des < 0 || Des >= 26) {
    alert("El abecedario tiene 26 letras, te pasaste.");
    return;
  }
  if (Descifra)
    Des= (26 - Des) % 26;
  var textElem = document.getElementById("texto");
  textElem.value = Desplazo(textElem.value, Des);
}
function Desplazo(texto, Des) {
  var result = "";
  for (var i = 0; i < texto.length; i++) {
    var c = texto.charCodeAt(i);
    if (65 <= c && c <=  90)
      result += String.fromCharCode((c - 65 + Des) % 26 + 65).charCodeAt(0);  
    else if (97 <= c && c <= 122)
      result += String.fromCharCode((c - 97 + Des) % 26 + 97).charCodeAt(0);  
    else
      result += texto.charAt(i);  
  }
  return result;
}
.ca {
  background-image: url("louis-vuitton.jpg");
}
.text{
  position:relative;
  top: 150px;
  left: 530px;
}
.kaik{
  position:relative;
  top: 200px;
  left: 850px;
}
.PE{
  position: relative;
  top:50px;
  left:700px;
  font-family: Arial;
  color: white;
}
<html>
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  </head>
  <body class="ca">
    <form>
      <H1 CLASS="PE">CIFRADO</H1>
      <textarea  class="text" id="texto" cols="50" rows="10" style="width:40em; height:15em"></textarea>
      <br>
      <br>
      <input class="kaik" type="text" id="cambios" value="" style="width:4em;" />
      <input class="kaik" id="caik" type="button" value="Cifra" onclick="Codifica(false);" />
      <input class="kaik" id="caik" type="button" value="Decifra" onclick="Codifica(true);" />
    </form>
  </body>
</html>

Answer:

Before I start with my possible answer I will tell you that I agree with @toledano.

I made you this small example, I hope and it serves you:

 var alfabeto = 'abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789', desplazamiento = 3, boton_de_cifrar = document.getElementById('cifrar'), boton_de_descifrar = document.getElementById('descifrar'), entrada = document.getElementById('input'), salida = document.getElementById('output'); function cifrar(input, output, desplazamiento){ var resultado = ''; //Usaremos un bucle for(var i=0, c; c=input[i]; i++){ var caracter_actual = '', indice_actual = alfabeto.indexOf( c ); if((indice_actual + desplazamiento) <= alfabeto.length){ //Desaplazamos el caracter. caracter_actual = alfabeto[ (indice_actual + desplazamiento) ]; //Convertimos a ASCII caracter_actual = caracter_actual.charCodeAt( 0 ); //El guion lo usamos para delimitar cada caracter cifrado y poder decifrarlo. resultado += caracter_actual + '-'; } else{ var indice_actual_temporal = indice_actual + desplazamiento, sobrante = indice_actual_temporal - alfabeto.length; // //Usaremos solo el desplazamiento para reemplazar el caracter. caracter_actual = alfabeto[sobrante]; //Convertimos a ASCII caracter_actual = caracter_actual.charCodeAt( 0 ); resultado += caracter_actual + '-'; } } output.value = resultado.replace(/\-$/, ''); } function descifrar(output, desplazamiento){ var array_de_caracteres = output.value.split('-'), resultado = ''; //Usaremos un bucle for(var i=0, c; c=array_de_caracteres[i]; i++){ c = String.fromCharCode( parseInt( c ) ); var caracter_actual = '', indice_actual = alfabeto.indexOf( c ); if((indice_actual - desplazamiento) >= 0){ caracter_actual = alfabeto[ (indice_actual - desplazamiento) ]; resultado += caracter_actual; } else{ var indice_actual_temporal = indice_actual - desplazamiento, sobrante = parseInt(indice_actual_temporal.toString().replace('-', '') ); caracter_actual = alfabeto[alfabeto.length - sobrante]; resultado += caracter_actual; } } output.value = resultado } boton_de_cifrar.addEventListener('click', function(){ cifrar(entrada.value, salida, desplazamiento); }, false); boton_de_descifrar.addEventListener('click', function(){ descifrar(salida, desplazamiento); }, false);
 <input type="text" id="input" placeholder="Texto a cifrar"> <button id="cifrar">Cifrar Texto</button> <hr> <input type="text" id="output" placeholder="Aqui aparecera el texto cifrado"> <button id="descifrar">Descifrar Texto</button>

I used a single alphanumeric characters for the example, I hope and it works for you.

Scroll to Top