-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpolybius.js
More file actions
114 lines (102 loc) · 3.8 KB
/
Copy pathpolybius.js
File metadata and controls
114 lines (102 loc) · 3.8 KB
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// returns a polybius square substitution cipher encryption/decryption
var polybiusCipher = function (selector, message, keyword) {
var pA = ["a","b","c","d","e","f","g","h","i","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"];
// clean keyword, swap j for i, remove repeated letters
var cleanKey = [];
var char = "";
for (var i = 0; i < keyword.length; i ++) {
char = keyword[i].toLowerCase();
if (char === "j") {
char = "i";
}
if ((char >= "a") && (char <= "z")) {
if (cleanKey.indexOf(char) === -1) {
cleanKey.push(char);
}
}
}
//console.log(cleanKey);
// construct ciphertext alphabet
var cA = [];
for (var i = 0; i < cleanKey.length; i ++) {
cA[i] = cleanKey[i].toUpperCase();
}
for (var i = 0; i < pA.length; i ++) {
char = pA[i].toUpperCase();
if (cA.indexOf(char) === -1) {
cA.push(char);
}
}
//console.log(cA);
// construct square for display
//var psq = "";
//for (var c = 0; c < 5; c ++) {
// for (var r = 0; r < 5; r ++) {
// psq += cA[(c * 5) + r] + " ";
// }
// psq += "\n";
//}
//console.log(psq);
var output = "";
// encrypt - clean message, swap j for i, get digraphs for message chars
if (selector === "encrypt") {
var cleanMessage = [];
var char = "";
for (var i = 0; i < message.length; i ++) {
char = message[i].toLowerCase();
if (char === "j") {
char = "i";
}
if ((char >= "a") && (char <= "z")) {
cleanMessage.push(char);
}
}
//console.log(cleanMessage);
var oA = [];
for (var i = 0; i < cleanMessage.length; i ++) {
var p = cA.indexOf(cleanMessage[i].toUpperCase());
var pD = Math.floor(p / 5) + 1;
var pM = (p % 5) + 1;
var pS = pM.toString() + pD.toString();
oA.push(pS);
}
}
// decrypt - clean ciphertext, get plaintext for digraph
if (selector === "decrypt") {
var cleanMessage = [];
for (var i = 0; i < message.length; i ++) {
if ((message[i] >= "1") && (message[i] <= "5")) {
cleanMessage.push(message[i]);
}
}
if ((cleanMessage.length % 2) === 1) {
cleanMessage.push("1");
}
//console.log(cleanMessage.length);
var di = "";
var ptis = [];
for (var i = 0; i < cleanMessage.length; i += 2) {
di = cleanMessage[i].toString() + cleanMessage[i + 1].toString();
var col = parseInt(di[0]);
var row = parseInt(di[1]);
var p = ((row - 1) * 5) + col - 1;
ptis.push(p);
}
var oA = [];
for (var i = 0; i < ptis.length; i ++) {
oA.push(cA[ptis[i]].toLowerCase());
}
}
for (var i = 0; i < oA.length; i ++) {
output = output + oA[i];
}
//console.log(output);
var returns = [];
returns.push(output);
returns.push(cA.slice(0,1) + " " + cA.slice(1,2) + " " + cA.slice(2,3) + " " + cA.slice(3,4) + " " + cA.slice(4,5));
returns.push(cA.slice(5,6) + " " + cA.slice(6,7) + " " + cA.slice(7,8) + " " + cA.slice(8,9) + " " + cA.slice(9,10));
returns.push(cA.slice(10,11) + " " + cA.slice(11,12) + " " + cA.slice(12,13) + " " + cA.slice(13,14) + " " + cA.slice(14,15));
returns.push(cA.slice(15,16) + " " + cA.slice(16,17) + " " + cA.slice(17,18) + " " + cA.slice(18,19) + " " + cA.slice(19,20));
returns.push(cA.slice(20,21) + " " + cA.slice(21,22) + " " + cA.slice(22,23) + " " + cA.slice(23,24) + " " + cA.slice(24,25));
return output.toLowerCase();
};