Когда я хотел зашифровать и расшифровать какой-то текст… все мнения говорили, что я должен отказаться от javaScript, так как это будет сложно и будет использовать много кода, или я должен использовать liberees и внешний код.
Важно написать, что вы будете делать. напишите свой алгоритм и сделайте его шаг за шагом.
Я начал с чистой текстовой области и двух кнопок типа ввода в моем html и с чистого кода javaScript.
Я использовал только три функции, чтобы сделать это …. первый - зашифровать с помощью ключа сдвига, который берет строку и работает с ней в верхнем или нижнем регистре и возвращает зашифрованный текст.
var result =""; for (var i = 0; i < text.length; i++) { var c = text.charCodeAt(i); if (65 <= c && c <= 90) result += String.fromCharCode((c — 65 + shift) % 26 + 65); // Uppercase else if (97 <= c && c <= 122) result += String.fromCharCode((c — 97 + shift) % 26 + 97); // Lowercase else result += text.charAt(i); // Copy }
Вторая функция getFrequency, используемая для вычисления частот каждой буквы зашифрованного текста и возврата массива частот.
for(var prop in englishFreq){ if(!freq[prop] ){ freq[prop] = 0; } } for (var i=0; i<string.length;i++) { var character = string.toLowerCase().charAt(i); if (freq[character]) { freq[character]++; } else { freq[character] = 1; } freq[character] = freq[character] / length; }
мы должны сделать это 26 раз с увеличением сдвинутой клавиши на 1, так как у нас есть 26 символов в английской букве.
Чтобы ослабить этот текст, я использовал функцию коэффициентов корреляции.
Я знаю, это вас напугало, но я использовал небольшую функцию.. третью, чтобы сделать эту функцию correlationCoefficient, которая принимает частоты английского символа в качестве первого параметра (постоянные частоты) и принимает частоты
которые мы рассчитали ранее, и вычислить r по:
for (var i = 0; i < n; i++) { sum_X = sum_X + xValues[i]; sum_Y = sum_Y + yValues[i]; sum_XY = sum_XY + xValues[i] * yValues[i]; squareSum_X = squareSum_X + xValues[i] * xValues[i]; squareSum_Y = squareSum_Y + yValues[i] * yValues[i]; } var corr = (n * sum_XY — sum_X * sum_Y) / Math.sqrt((n * squareSum_X — sum_X * sum_X) * (n * squareSum_Y — sum_Y * sum_Y)); return corr;
Таким образом, мы можем получить максимальное число из этого массива, и это наш ключ. Это ключ, которым мы шифруем, а затем мы можем вернуться к первой функции и снова расшифровать текст.
Вы можете найти весь код здесь
https://github.com/nourhansaied/encrypt-decrypit
Спасибо.