Делаю шифр Вигена. Я не могу понять почему при введении ключа и нажатия шифрования или расшифрования срабатывает alert("Ключ не содержит буквы");. В чем заключается проблема, я указал позиции русский букв.
function doCrypt(isDecrypt) {
if (document.getElementById("key").value.length == 0) {
alert("Ключ не введен");
return;
}
var key = filterKey(document.getElementById("key").value);
if (key.length == 0) {
alert("Ключ не содержит буквы");
return;
}
if (isDecrypt) {
for (var i = 0; i < key.length; i++)
key[i] = (33 - key[i]) % 33;
}
var textElem = document.getElementById("text");
textElem.value = crypt(textElem.value, key);
}
// Возвращает результат шифрования с заданным ключом.
function crypt(input, key) {
var output = "";
for (var i = 0, j = 0; i < input.length; i++) {
var c = input.charCodeAt(i);
if (isUppercase(c)) {
output += String.fromCharCode((c - 192 + key[j % key.length]) % 33 + 192);
j++;
} else if (isLowercase(c)) {
output += String.fromCharCode((c - 224 + key[j % key.length]) % 33 + 224);
j++;
} else {
output += input.charAt(i);
}
}
return output;
}
/* Возвращает массив чисел, каждый в диапазоне [0, 33], представляющий данный ключ.
* Ключ нечувствителен к регистру, а не-буквы игнорируются.
*/
function filterKey(key) {
var result = [];
for (var i = 0; i < key.length; i++) {
var c = key.charCodeAt(i);
if (isLetter(c))
result.push((c - 65) % 32);
}
return result;
}
// Проверяет, является ли указанный код символа буквой.
function isLetter(c) {
return isUppercase(c) || isLowercase(c);
}
// Проверяет, является ли указанный код символа заглавной буквой.
function isUppercase(c) {
return 192 <= c && c <= 223; // 192 - код символа для «A» и 223 для 'Я'.
}
// Проверяет, является ли указанный код символа строчной буквой.
function isLowercase(c) {
return 224 <= c && c <= 255; // 224 - код символа для «а» и 255 для 'я'.
}
HTML-разметка
<h1>Шифр Вигена</h1>
<div class="page_left">
<p>Введите сообщение:</p>
<textarea type="text" id="encrypted_input"></textarea>
<p>Введите ключ:</p>
<input type="text" value="" id="encrypted_key" />
<input type="button" value="Шифровать" onclick="doCrypt(false)" />
<input type="button" value="Дешифровать" onclick="doCrypt(true)" />
</div>
Сборка персонального компьютера от Artline: умный выбор для современных пользователей