-
Notifications
You must be signed in to change notification settings - Fork 0
/
caesar.js
88 lines (84 loc) · 3.49 KB
/
caesar.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
function btnEncrypt() {
document.getElementById("resultBruteforce").innerHTML = "";
var plainText = document.getElementById("plainText").value;
if (plainText.length == 0) {
document.getElementById("errorMsg").innerHTML = 'Chưa nhập Plain text kìa! :D';
return;
}
var key = document.getElementById("key").value.toUpperCase();
if ((isNaN(key) && key.length > 1) || (!isNaN(key) && key.length > 2) || (key.length == 0)) {
document.getElementById("errorMsg").innerHTML = 'Khóa K bị rỗng hoặc sai!';
return;
}
if (!isKeyValid(key)) {
document.getElementById("errorMsg").innerHTML = 'Khóa K không hợp lệ.';
return;
}
if (!isNaN(key)) {
if ((parseInt(key) < 0) || (parseInt(key) > 26)) {
document.getElementById("errorMsg").innerHTML = 'Khóa K chỉ từ 0 đến 26';
return;
}
key = String.fromCharCode(parseInt(key) + 65);
}
//document.getElementById("key").value = key;
var cipherText = crypt(plainText, key);
document.getElementById("cipherText").value = cipherText;
document.getElementById("errorMsg").innerHTML = "";
}
function crypt(text, key, isDecrypt = false) {
var codeKey = key.charCodeAt() - 65;
if (isDecrypt == true) {
codeKey = 26 - codeKey;
}
var result = "";
for (let i = 0; i < text.length; i++) {
var codeTxt = text.charCodeAt(i);
if (codeTxt >= 65 && codeTxt <= 90) {
let resultCode = ((codeTxt - 65) + codeKey) % 26;
result += String.fromCharCode(resultCode + 65);
} else if (codeTxt >= 97 && codeTxt <= 122) {
let resultCode = ((codeTxt - 97) + codeKey) % 26;
result += String.fromCharCode(resultCode + 97);
} else {
result += text.charAt(i);
}
}
return result;
}
function btnDecrypt() {
document.getElementById("resultBruteforce").innerHTML = "";
var cipherText = document.getElementById("cipherText").value;
if (cipherText.length == 0) {
document.getElementById("errorMsg").innerHTML = 'Chưa nhập Cipher text kìa!';
return;
}
document.getElementById("cipherText").value = cipherText;
var key = document.getElementById("key").value.toUpperCase();
if (key.length > 1) {
document.getElementById("errorMsg").innerHTML = 'Khóa K chỉ một ký tự thôi nhé';
return;
} else if (key.length == 0) {
document.getElementById("plainText").value = "";
var result = "<b>Tổng hợp các trường hợp phá mã:</b><br/><table><tr><th><b>Key K</b></th><th><b>PlainText</b></th></tr>";
for (let i = 65; i <= 90; i++) {
result += "<tr><td>" + String.fromCharCode(i) + "</td><td>" + crypt(cipherText, String.fromCharCode(i), true) + "</td></tr>";
}
result += "</table>";
document.getElementById("resultBruteforce").innerHTML = result;
} else {
document.getElementById("key").value = key;
var plainText = crypt(cipherText, key, true);
document.getElementById("plainText").value = plainText;
}
document.getElementById("errorMsg").innerHTML = "";
}
function isKeyValid(key) {
for (let i=0; i < key.length; i++) {
codeKey = key.charCodeAt(i);
if (!((codeKey >= 65 && codeKey <= 90) || (codeKey >= 48 && codeKey <= 57))) {
return false;
}
}
return true;
}