-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcifra.js
212 lines (186 loc) · 6.61 KB
/
cifra.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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
let form = document.querySelector('form');
let input = document.getElementById('CipherInput');
let selection = document.getElementById('EncodeTypes');
let radios = document.querySelectorAll('input[type=radio]');
let passoContainer = document.querySelector('label[for=CipherPass]');
let passo = document.getElementById('CipherPass');
let result = document.getElementById('Result');
let button = document.querySelector('input[type=submit]');
form.addEventListener("submit", function(e) {
e.preventDefault()
return false;
})
radios.forEach(radio => {
radio.addEventListener('click', (e) => {
if(e.target.id == 'encode'){
button.value = 'Codificar'
}
else{
button.value = 'Decodificar'
}
})
})
selection.addEventListener("change",function(e) {
if( e.target.value == '1' ){
passoContainer.style.display = 'none';
}
else if(e.target.value == '2') {
passoContainer.style.display = 'flex';
}
})
input.addEventListener("keyup", function(e) {
//fomart input on change
if(input.value.length == 0 || input.value == null) return;
// se for uma decodificação e for base64, não valdia input
if(radios[1].checked && selection.value == '1' ) return;
input.value = ValidateTextInput(input.value)
})
button.addEventListener("click", function(e){
//check if necessary information is has been provided
let text = input.value
let step = passo.value
// se for uma decodificação e for base64, valida input
if(radios[1].checked && selection.value == '1' ) {
input.value = ValidateTextInput(input.value)
text = input.value
}
if(input.value == null || input.value.length == 0){
alert("Voce deve inserir um conteudo a ser cifrado.")
return
}
if(!isEncriptionTypeSelected()) return;
if(!isRadioSelected()) return;
if(!isValidPasso() && selection.value == '2') {
alert('Voce deve inserir um numero para o passo.')
};
// if not, return action
if(radios[0].checked && selection.value == '1'){
//encode && base64
result.value = encodeBase64(text)
}
else if (radios[1].checked && selection.value == '1'){
//decode && base64
result.value = decodeBase64(text)
}
else if (radios[0].checked && selection.value == '2'){
//encode && cifra
result.value = cifra(text, step)
}
else if (radios[1].checked && selection.value == '2'){
//decode && cifra
result.value = decifra(text, step)
}
})
function encodeBase64(text){
text = text.toString()
return btoa(text)
}
function decodeBase64(text){
text = text.toString()
return atob(text)
}
function isRadioSelected(){
if(!radios[0].checked && !radios[1].checked){
alert('Você deve escolher uma das opções entre encriptação ou desencriptação')
return false
}
return true
}
function isEncriptionTypeSelected(){
if(selection.value == '1' || selection.value == '2'){
return true
}
alert('Você deve escolher o tipo de encriptação desejado')
return false;
}
function containSpecialCharacter (text) {
let format = /[a-zA-Z0-9 ]/gm
if(format.test(char)){
alert('Não é permitido a inserção de characteres especiais.')
}
}
function ValidateTextInput(char){
let format = /[a-zA-Z0-9 ]{1,}/gm
let result = ''
if(!format.test(char)){
alert('Não é permitido a inserção de characteres especiais.')
result = char.match(format)
return result
}
result = char.match(format)
return result[0]
}
function isValidPasso(){
let format = /[0-9]{1,}/gm
if(!format.test(`${passo.value}`)){
return false
}
let result = `${passo.value}`.match(format)
passo.value = result;
return true
}
function cifra(texto, passo){
let result = ''
let currentCode = 0;
if(typeof parseInt(passo) != 'number') return;
passo = parseInt(passo);
for (let i = 0; i < texto.length; i++) {
if (texto.charCodeAt(i) >= 48 && texto.charCodeAt(i) <= 57){
passo = passo % 10
//ensure the passp in the numbers range
currentCode = (((texto.charCodeAt(i) - 48) + passo) % 10) + 48;
}
else if (texto.charCodeAt(i) >= 65 && texto.charCodeAt(i) <= 90) {
passo = passo % 26
//letras maisculas
//divide o codigo pelo valor inicial da primeira letra da tabela ascii
//soma o passo
//divide por 26 para garantir que o valor não exceda o codigo maximo do alphabeto maiusculo
//soma o valor resultante ao valor inical deslocando o codigo
currentCode = (((texto.charCodeAt(i) - 65) + passo) % 26) + 65;
}
else if (texto.charCodeAt(i) >= 97 && texto.charCodeAt(i) <= 122) {
passo = passo % 26
//letras minusculas
currentCode = (((texto.charCodeAt(i) - 97) + passo) % 26) + 97;
}
else if (texto.charCodeAt(i) == 32) {
currentCode = 32;
}
result += String.fromCharCode(currentCode);
}
return result.toLowerCase();
}
function decifra(texto, passo){
let result = ''
let currentCode = 0;
//garante que o passo não sera maior que a quantidade de characteres do alphabeto
if(typeof parseInt(passo) != 'number') return;
passo = parseInt(passo);
for (let i = 0; i < texto.length; i++) {
if (texto.charCodeAt(i) >= 48 && texto.charCodeAt(i) <= 57){
passo = passo % 10
//ensure the passp in the numbers range
currentCode = (Math.abs((texto.charCodeAt(i) - 48) - passo + 10) % 10) + 48;
}
else if (texto.charCodeAt(i) >= 65 && texto.charCodeAt(i) <= 90) {
passo = passo % 26
//letras maisculas
//divide o codigo pelo valor inicial da primeira letra da tabela ascii
//soma o passo
//divide por 26 para garantir que o valor não exceda o codigo maximo do alphabeto maiusculo
//soma o valor resultante ao valor inical deslocando o codigo
currentCode = (Math.abs((texto.charCodeAt(i) - 65) - passo + 26) % 26) + 65;
}
else if (texto.charCodeAt(i) >= 97 && texto.charCodeAt(i) <= 122) {
passo = passo % 26
//letras minusculas
currentCode = (Math.abs((texto.charCodeAt(i) - 97) - passo + 26) % 26) + 97;
}
else if (texto.charCodeAt(i) == 32) {
currentCode = 32;
}
result += String.fromCharCode(currentCode);
}
return result.toLowerCase();
}