Когда я хотел зашифровать и расшифровать какой-то текст… все мнения говорили, что я должен отказаться от 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

Спасибо.