-
Notifications
You must be signed in to change notification settings - Fork 0
/
JavascriptCaesar.js
113 lines (86 loc) · 2.83 KB
/
JavascriptCaesar.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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
function CaesarCipher()
{
var testString = "Bugs Bunny"; //test strings
var testTwo = "Spaghetti and Meatballs"
var testThree = "Happy Easter"
var shifta = 7;
var i = 0;
testString = testString.toLowerCase(); //make string lower case
print("Original String: ", testString);
var encryptOne = testString.split("").map(ascii); //make string into array of ascii
Encrypt(encryptOne, shifta, testString, i); //call encrypt function
}
function Encrypt(testOne, shiftb, originalString, j)
{
var L = originalString.length
if(testOne[j] >= 97 && testOne[j] <= 122) //check if between 97 and 122
{
testOne[j] = ((testOne[j] - 97 + shiftb) % 26) + 97; //shift and wrap alphabet
}
j = j+1; //increase counter
if(j < L)
{
Encrypt(testOne, shiftb, originalString, j); //recursively call encrypt
}
else
{
var encryptedOne = testOne.map(fix).join(""); //set it back to string
print("Encrypted String: ", encryptedOne);
j = 0;
Decrypt(testOne, shiftb, originalString, j, L); //call decrypt
Solve(testOne, 1, j, L, 1); //call solve
}
}
function Decrypt(testTwo, shiftc, StringLe, k, Le)
{
if (testTwo[k] >= 97 && testTwo[k] <= 122)
{
var check = (testTwo[k] - 97 - shiftc) % 26;
if (check < 0) //javascript has this weird thing where if you're modding a negative it just sets it to itself so this is a fix for that
{
check += 26;
}
testTwo[k] = check + 97;
}
k = k+1; //increase counter
if(k < Le)
{
Decrypt(testTwo, shiftc, StringLe, k, Le); //recursively call itself
}
else
{
var decrypted = testTwo.map(fix).join(""); //set back to string
print("Decrypted String: ", decrypted);
}
}
function Solve(final, maxShift, l, len, shiftd)
{
if(maxShift <= 26) // loop through 26 times
{
if(final[l] >= 97 && final[l] <= 122) //check if between 97 and 122
{
final[l] = ((final[l] - 97 + shiftd) % 26) + 97; //shift and wrap alphabet
}
l += 1; //increase counter
if(l < len)
{
Solve(final, maxShift, l, len, shiftd); //recursively call itself
}
else
{
var solved = final.map(fix).join("");
print("Solve: ", solved);
maxShift += 1;
l = 0;
var again = solved.split("").map(ascii);
Solve(again, maxShift, l, len, shiftd); //recursively call itself
}
}
}
function ascii (a) //returns ascii value of character at spot a
{ return a.charCodeAt(0); }
function fix (b) //returns character value of ascii at spot b
{ var x = String.fromCharCode(b);
return x
}
CaesarCipher()