-
Notifications
You must be signed in to change notification settings - Fork 0
/
javascript.js
61 lines (49 loc) · 1.87 KB
/
javascript.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
function addListeners(){
var button_encrypt = document.getElementById('button_encrypt');
var button_decrypt = document.getElementById('button_decrypt');
var button_swap = document.getElementById('button_swap');
if(window.addEventListener) {
button_encrypt.addEventListener("click", callback("encrypt"), false);
button_decrypt.addEventListener("click", callback("decrypt"), false);
button_swap.addEventListener("click", callback("swap"), false);
}
}
/*
Encryption
The the plaintext(P) and key(K) are added modulo 26 (length alphabet).
Ei = (Pi + Ki) mod 26
Decryption
Di = (Ei - Ki + 26) mod 26
modulus operator (%)
A%B: if A<B the division A/B returns 0 with the remainder A
*/
function callback(action){
var output_text = document.getElementById('output');
var output_keyword = document.getElementById('output_keyword');
var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
return function(){
var key = document.getElementById('key').value.toUpperCase();
var message = Array.from(document.getElementById('message').value.cleanup());
console.log(message);
key = key.repeat(Math.floor(message.length/key.length)) + key.slice(0,message.length%key.length);
var output = Array();
if(action == "encrypt"){
output = message.map((message_char,index)=>{
return alphabet.charAt((alphabet.indexOf(message_char) + alphabet.indexOf(key.charAt(index))) % alphabet.length)
});
}
if(action == "decrypt"){
output = message.map((message_char,index)=>{
return alphabet.charAt((alphabet.indexOf(message_char) - alphabet.indexOf(key.charAt(index)) + alphabet.length) % alphabet.length)
});
}
if(action == "swap"){
document.getElementById('message').value = output_text.value;
}
output_text.innerHTML = output.join("");
}
}
String.prototype.cleanup = function() {
return this.toUpperCase().replace(/[^a-zA-Z]+/g, "");
}
window.onload = addListeners;