Я работаю над своим собственным Vigenere Cipher на JavaScript.Мне это нравится.В любом случае, шифрование и дешифрование одинаковы, за исключением того, что decrypt () - это «-» keyStr вместо «+» в нижней части.Шифрование работает отлично.Но по какой-то причине при расшифровке некоторые символы появляются как неопределенные случайным образом.Я знаю, что алгоритм работает для C ++, Python, Java и Swift.В чем здесь ошибка?
Я попытался напечатать индексы символов в алфавитном массиве, и значения индексов в decrypt () оказались странными, и я не могу понять, почему.
function ascii(x) {
return x.charCodeAt(0);
}
function decrypt() {
var alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var msgStr = "";
var keyTemp = "";
var keyStr = "";
var output = "";
var input = document.getElementById("inMsg").value;
var key = document.getElementById("key").value;
input = input.toUpperCase();
key = key.toUpperCase();
for(let i = 0; i < input.length; i++) {
for(let x = 0; x < alpha.length; x++) {
if (input[i] == alpha[x]) {
msgStr += alpha[x];
}
}
}
for(let i = 0; i < msgStr.length; i++) {
keyTemp += key[i % key.length]
}
for(let i = 0; i < keyTemp.length; i++) {
for(let x = 0; x < alpha.length; x++) {
if (keyTemp[i] == alpha[x]) {
keyStr += alpha[x];
}
}
}
for(let i = 0; i < msgStr.length; i++) {
let x = (ascii(msgStr[i]) - ascii(keyStr[i])) % 26;
output += alpha[x];
}
document.getElementById("outMsg").value = output;
}