-
Notifications
You must be signed in to change notification settings - Fork 0
/
scriptEncrypt.js
139 lines (111 loc) · 3.34 KB
/
scriptEncrypt.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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
document.addEventListener('DOMContentLoaded', () => {
//Event listener to generate encryption key each time the user types a new character in
//secret message field
document.querySelector("#plainText").addEventListener('keyup', event => {
updateKey();
});
//Button to generate a new key
document.querySelector("#btnNewKey").onclick = () => {
updateKey();
}
//Button to encrypt message
document.querySelector("#btnEncrypt").onclick = () => {
encryptText();
}
//Button to copy key to clipboard
document.querySelector("#btnCopyKey").onclick = () => {
copyKey();
}
//Button to copy ciphertext to clipboard
document.querySelector("#btnCopyCipher").onclick = () => {
copyCipher();
}
});
function showPageMsg(msgClass, msgText){
/**
Shows a message on top of the page, like an error or a warning
*/
let msg = document.querySelector("#pageMsg");
msg.setAttribute("class",msgClass);
msg.innerText = msgText;
}
function generateKey(keyLength) {
/**
This function randomly generates a key of the same length of the plaintext.
*/
//Possible characters in key
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
const charLength = characters.length;
let keyArray = [];
for (var i=0; i < keyLength; i++) {
keyArray.push(characters.charAt(Math.floor(Math.random() * charLength)) );
}
let keyString = keyArray.join("");
return keyString;
}
function updateKey() {
/**
This function let user update the key by generating a new random one.
*/
let newKey = "";
let plaintext = document.querySelector("#plainText");
let len = plaintext.value.length;
let otpKey = document.querySelector("#OTPKey");
if (len > 0) {
newKey = generateKey(len);
} else {
let cipherDiv = document.querySelector("#cipherText");
cipherDiv.innerText = "";
cipherDiv.parentElement.style.display = "none";
}
otpKey.value = newKey;
}
function encryptText() {
/**
The function encrypts text executing the bitwise XOR operation between the
plain text and the key.
*/
let plaintext = document.querySelector("#plainText");
let len = plaintext.value.length;
let otpKey = document.querySelector("#OTPKey");
let keyLen = otpKey.value.length;
//Check if the key has the correct length
if (keyLen < len) {
showPageMsg("alert alert-danger", "Incorrect key length...the key has to be at least as long as the plain text.");
return false;
}
cipherArray = [];
for (var i=0; i < len; i++) {
let bitVal = plaintext.value[i].charCodeAt(0) ^ otpKey.value[i].charCodeAt(0);
cipherArray.push(bitVal);
}
let ciphertext = cipherArray.join(" ");
writeCypherText(ciphertext);
}
function writeCypherText(cText) {
/**
This function write the ciphertext rendering the div visible
*/
let textDiv = document.querySelector("#cipherText");
textDiv.innerText = cText;
textDiv.parentElement.style.display = "block";
}
function copyKey(){
/**
Copy key to clipboard
*/
document.querySelector("#OTPKey").select()
document.execCommand("copy");
}
function copyCipher() {
/**
Copy enctypted text to clipboard
*/
let newT = document.createElement("textarea");
let ciphDiv = document.querySelector("#cipherText");
newT.value = ciphDiv.innerText;
ciphDiv.appendChild(newT);
newT.select();
document.execCommand("copy");
newT.remove();
}