aboutsummaryrefslogtreecommitdiff
path: root/challenge-015/zapwai/javascript/ch-2.js
blob: cf58aa6f8a2bbd0325da46ef2e54074e1f21701c (plain)
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
function vigenere(mode, key, msg) {
    let alph = "abcdefghijklmnopqrstuvwxyz";
    let q = msg.length / key.length;
    while (q > 0) {
        key += key;
        q--;
    }
    while (key.length > msg.length) {
        key = key.substr(0,key.length-1);
    }

    let msg_letters = msg.split('');
    let key_letters = key.split('');
    let rots = [];
    for (let i = 0; i < key_letters.length; i++) {
	rots.push(alph.indexOf(i));
    }
    let ans_letters = [];
    for (let i = 0; i < msg_letters.length; i++) {
	if (!msg_letters[i].match(/[a-z]/)) {
	    ans_letters.push(msg_letters[i]);
	    continue;
	}
	let v = alph.indexOf(msg_letters[i]);
	let x = 0;
	if (mode == 0)
	    x = (v + rots[i]) % 26;
	else 
	    x = (v - rots[i]) % 26;
	let letter = alph.substr(x,1);
	ans_letters.push(letter);
    }
    return ans_letters.join('');
}
let msg = "hello world";
let key = "test";
let enc = vigenere(0, key, msg);
let dec = vigenere(1, key, enc);
console.log(enc);
console.log(dec);