Решение алгоритма Цезаря с ключом

Рейтинг: 1Ответов: 1Опубликовано: 22.09.2014

Помогите выяснить, почему не хочет выводить значение зашифрованное, и, если можно, укажите на ошибки в общей программе. Fiddle.

function Cesar(offset, key, str) {
    var ACode = "a".charCodeAt(0),
        alphabetSize = 26;
    var mass_key = [],
        mass_alf = [],
        kon = 97,
        smeh = offset,
        chr;
    for (var i = 0; kon < (ACode + alphabetSize); ++i) { // алфавитный массив
        mass_alf.splice(i, 0, kon++);
    }
    for (var i = 0; key.length > i; i++) { // ключ массив
        mass_key.splice(i, 0, key.charCodeAt(i));
    }
    for (var i = 0; mass_key.length > i; i++) { // исключение повторений в массиве ключа
        for (var l = i + 1; mass_key.length > l; l++) {
            if (mass_key[i] === mass_key[l]) mass_key.splice(l, 1);
        }
    }
    for (var l = 0; mass_alf.length > l; l++) { // исключение повторения в массиве alf
        for (var n = 0; mass_key.length > n; n++) {
            if (mass_key[n] === mass_alf[l]) mass_alf.splice(l, 1);
        }
    }
    for (var i = 0; mass_key.length > i; i++) { // помещение ключа в массив alf
        mass_alf.splice(smeh++, 0, mass_key[i]);
    }
    return mass_alf;
    var code = 0;
    // = (ch+offset-ACode+alphabetSize)%alphabetSize + ACode;
    for (var a = 0; a < str.length; ++a)
    if ((chr = str.charCodeAt(a)) && (chr >= ACode) && (chr - ACode < alphabetSize)) // если больше 1 символа и больше колва алф то.
    for (var i = 0; mass_alf.length > i; i++) {
        if (chr === mass_alf[i]) {
            code = mass_alf[i + offset];
            if (code === undefined) code = mass_alf[(i + offset) % alphabetSize];
            res += String.fromCharCode(code);
        }
    } else res += str.charAt(a); // просто записываем букву которая прийшла 
    return res;
}
var c = prompt('Vvedite key', 'academia');
var k = prompt('Vvedite key', 'slovo');
alert(Cesar(3, c, k));

Ответы

▲ 1Принят

Любопытсва ради реализовал этот алгоритм. Вроде, работает.

y^&j0ЮЯЭ=D:o*Ы!k<
(пароль: Кораблекрушение )

Попробуйте разобраться что там к чему, и добавить встроенный в программу ключ, который будет однозначно перемешивать исходный алфавит, чтобы в алфавите не было очевидных "абвгдеёжз".