Ошибка с шифром Виженера - JavaScript

296
02 мая 2018, 04:47

Делаю шифр Вигена. Я не могу понять почему при введении ключа и нажатия шифрования или расшифрования срабатывает 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>
READ ALSO
Не работает код вставки изображения на fabric.js

Не работает код вставки изображения на fabric.js

Имеется код из офф документации fabricjs

252
Ошибка gray css

Ошибка gray css

https://githubcom/karlhorky/gray

232
Как исправить символы

Как исправить символы

Пишу аудиоплеер

280
Компоненты во Vue.js

Компоненты во Vue.js

разрабатывай SPA приложение при помощи Vuejs, сейчас занимаюсь комнатой администратора

242