-
Notifications
You must be signed in to change notification settings - Fork 0
/
Cifrado_César.js
92 lines (84 loc) · 3.51 KB
/
Cifrado_César.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*
* Crea una web que pida, por medio de un prompt(), una frase al usuario y devuelva el mismo mensaje encriptado según el algoritmo de Cifrado César
* con el parámetro de desplazamiento de 33 espacios hacia la derecha.
* Consideraciones Específicas:
* ·Tu programa debe ser capaz de cifrar y descifrar tanto letras mayúsculas como minúsculas. La fórmula para descifrar es: (x - n) % 26
* ·Tu código debe estar compuesto por 2 funciones con los siguientes nombres: cipher y decipher
* ·El usuario no debe poder ingresar un campo vacío o que contenga números
*/
function caesarCipher() {
do {
var word = prompt('Ingrese una palabra para cifrar o descifrar');
// expresión regular
var wordCondition = /^[A-z\s]*$/;
if (!wordCondition.test(word)) {
alert('Ingrese solo caracteres de A-Z');
}
if (word === '') {
alert('Ingrese una palabra con caracteres solo de A-Z');
}
} while (wordCondition.test(word) === false || word === '');
do {
var election = prompt('Para cifrar ingrese: 1 \nPara descifrar ingrese: 2');
if (election !== '') {
if (election === 1) {
cipher();
} else if (election === 2) {
decipher();
} else {
alert('Ingrese una opción válida');
}
}
} while (election === '' || (election !== '1' && election !== '2'));
}
// función para cifrar
function cipher() {
var newWord = [];
for (var i = 0; i < word.length; i++) {
var asciiNumber = word.charCodeAt(i);
// (x - (nº en ASCII) + n) % 26 + (nº en ASCII)
if (asciiNumber >= 65 && asciiNumber <= 90) {
// variable donde guardar estos numeros para aplicar el metodo String.fromCharCode()
var uppercase = (asciiNumber - 65 + 33) % 26 + 65;
var caesarCipherString = String.fromCharCode(uppercase);
newWord.push(caesarCipherString);
} if (asciiNumber >= 97 && asciiNumber <= 122) {
// variable donde guardar estos numeros para aplicar el metodo String.fromCharCode()
var lowercase = (asciiNumber - 97 + 33) % 26 + 97;
var caesarCipherString2 = String.fromCharCode(lowercase);
newWord.push(caesarCipherString2);
} if (asciiNumber === 32) {
newWord.push(' ');
}
}
return alert(newWord.join(''));
}
// función para descrifrar
function decipher() {
// en esta variable se guardaran las nuevas letras por separado
var newWord2 = [];
for (var i = 0; i < word.length; i++) {
// (x - (nº en ASCII) + n) % 26 + (nº en ASCII)
var asciiNumber1 = word.charCodeAt(i);
// rango de números para las mayúsculas
if (asciiNumber1 >= 65 && asciiNumber1 <= 90) {
// (x - (nº en ASCII) - n + 26(para hacer nº positivo)) % 26 + (nº en ASCII) variable para numeros: aplicar String.fromCharCode()
var uppercase2 = (asciiNumber1 - 65 - 33 + 26 * 2) % 26 + 65;
// transformo los números que resultaron en la línea anterior a la letra que le corresponda
var caesarDecipherString = String.fromCharCode(uppercase2);
// agrego cada la letra a un array
newWord2.push(caesarDecipherString);
}
if (asciiNumber1 >= 97 && asciiNumber1 <= 122) {
var lowercase2 = (asciiNumber1 - 97 - 33 + 26 * 2) % 26 + 97;
// variable donde guardar estos numeros para aplicar el metodo String.fromCharCode()
var caesarDecipherString2 = String.fromCharCode(lowercase2);
newWord2.push(caesarDecipherString2);
}
if (asciiNumber1 === 32) {
newWord2.push(' ');
}
}
return alert(newWord2.join(''));
}
caesarCipher();