-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhash-function-CRC.js
58 lines (48 loc) · 1.34 KB
/
hash-function-CRC.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
const findCRC = (number, g_x) => {
let size;
let substr = "";
let str = number.toString(2);
str += '0'.repeat(g_x.length);
while(str) {
do {
size = g_x.length - substr.length;
substr += str.slice(0, size);
substr = parseInt(substr, 2).toString(2);
str = str.replace(str.slice(0,size), "");
} while (substr.length !== g_x.length && str);
if (substr.length === g_x.length) {
substr = (parseInt(substr, 2) ^ parseInt(g_x, 2)).toString(2);
if (!str) return substr;
} else return(substr);
}
}
const findAllCollisions = (g_x) => {
let temp = "";
let arr;
let obj = {};
for(let i = 1; i<=255; i++) {
arr = []
temp = findCRC(i, g_x);
if (obj[temp]) {
arr = obj[temp];
arr.push(i);
obj[temp] = arr;
} else {
arr.push(i);
obj[temp] = arr;
}
}
return obj;
}
const main = () => {
let number = -1;
while (number <= 0 || number > 255) {
number = prompt('Введите число, размером 1 байт');
}
const g_x = "10101";
const crc = findCRC(Number(number), g_x);
alert('CRC для данного числа: ' + crc);
// вторая часть
console.log('Найденные коллизии хеш-функции для всех чисел размером 1 байт: ');
console.log(findAllCollisions(g_x));
}