К концу периода мы рассмотрим домашнее задание в области информационной безопасности. Я случайно столкнулся с алгоритмом Playfair и алгоритмом холма в алгоритме классической криптографии. Интересно внедрить его на языке JavaScript. Я проверяю Baidu во время кодировки, а затем даю хороший учебник по основам JavaScript.
Playfair
Пароль PlayFair (английский: Playfair Cipher или Playfair Square) - это пароль для замены. Написано на основе таблицы 5*5 квадратных шифров, с 25 буквами, расположенными в таблице. Для 26 букв на английском языке удалите наиболее часто используемый Z для формирования таблицы паролей.
Идеи реализации:
1. Подготовьте список паролей
Ключ - это слово или фраза, а таблица паролей отсортирована на основе ключа, данного пользователем. Если есть дубликаты букв, вы можете удалить дубликаты букв после этого.
Например, ключевая сумасшедшая собака может быть собрана в
| В | О | ЧАС | М | Т |
| Ведущий | Глин | я | Не | U |
| А | Беременный | Дж | П | V. |
| У | Эн | K | Q. | W. |
| Дюймовый | Фон | Л | С | Х |
Кода -копия выглядит следующим образом:
/*
* Функция: составление списка паролей
*
* Параметры: ключ (снятие пространства и обработка капитализации)
*
* Возврат: Таблица паролей
*/
Функция CreateKey (KeyChars) {
// алфавитный массив
var allchars = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'w', 'w', 'x', 'x', 'x', x ',' x ',' x ',' x ',' y ',' y ',', ',', ',', 'u', ',' w ',' q, 'R
// переменные клавиши QueyChars Получите позицию буквы в алфавитной таблице и удалите букву
for (var i = 0; i <keyChars.length; i ++) {
var index = allchars.indexof (KeyChars [i]);
if (index> -1) {
Allchars.splice (индекс, 1);
}
}
// вставить буквы в клавишу в алфавит
for (var i = keyChars.length-1; i> = 0; i-) {
Allchars.unshift (KeyChars [i]);
}
// Вставьте KeyChars из первого столбца в таблицу паролей
для (var i = 0; i <5; i ++) {
for (var j = 0; j <5; j ++) {
ключ [j] [i] = allchars [i*5+j];
}
}
}
Учитывая, что дублирующие символы и Z должны быть удалены при вставке клавиш в таблицу паролей, алгоритм проектирования выглядит следующим образом:
Кода -копия выглядит следующим образом:
/*
* Функция: удалите дубликаты букв из строк
*
* Параметры: строки, которые необходимо обработать
*
* Возврат: обработанная строка
*/
Функция удалена до конца (str) {
var result = [], tempstr = "";
var arr = str.split (''); // разделить строку на массив
//arr.sort() ;//sorting
for (var i = 0; i <arr.length; i ++) {
var repeatback = true; // Проектная переменная состоит в том, чтобы убедиться, что предыдущая часть строки не существует в одних и тех же символах, потому что следующий алгоритм может гарантировать, что одни и те же символы соединены вместе
for (var j = 0; j <result.length; j ++) {
if (arr [i] == result [j])
Repeatback = false;
}
if (arr [i]! == tempstr && repeatback) {
result.push (arr [i]);
tempstr = arr [i];
}еще{
продолжать;
}
}
return result.join (""); // конвертировать массив в строку
}
2. Организовать четкий текст
Сделайте пару из двух букв простого текста. Если есть две идентичные буквы рядом друг с другом в парах или последняя буква одинока, вставьте букву X. На ранней стадии кодирования он не был внимательным и отказался ввести количество букв как единственное, что сделало пользовательский опыт плохим.
var k = document.getElementbyId ("keyChars"). value.touppercase (). Заменить (// s/ig, '');
Удалите пространства и преобразуйте в пропускное значение для простого текста.
3. Напишите текст шифра
Правила шифрования простых текстов (от Baidu):
1) Если P1 P2 находится на той же строке, соответствующий зашифрованный текст C1 C2 - это буква, близкая к правому концу P1 P2. Первый столбец рассматривается как правая сторона последнего столбца. Например, согласно предыдущей таблице, CT соответствует OC
2) Если P1 P2 находится в одном столбце, соответствующий цифровый текст C1 C2 - это буквы, непосредственно ниже P1 P2. Первая строка рассматривается как ниже последней строки.
3) Если P1 и P2 не находятся в одном и том же ряду и в одном столбце, то C1 и C2 являются буквами в двух других углах прямоугольника, определяемых P1 и P2 (что касается горизонтальной замены или вертикальной замены, вы должны назначить встречу заранее или попробовать сами). Согласно предыдущей таблице, WH соответствует TK или KT.
Например, согласно вышеуказанной таблице, простой текст, где есть жизнь, есть надежда.
Сначала вы можете организовать это в то, чтобы он был
Тогда зашифрованный текст: kt yg wo ok gy nl hj of cm yg kg lm mb wf
Превратите зашифрованный текст в капитал, а затем организуйте его группами из нескольких букв.
Например, в группе из 5, ktygw ookgy nlhjo fcmyg kglmm bwf
4. Дешифрование
Заполните матрицу 5*5 (повторяйте повторяющиеся буквы и буквы Z), заполните оставшиеся позиции матрицы в порядке в оставшихся позициях матрицы и получите простой текст из зашифрованного текста в соответствии с матрицей замены. Сделай наоборот.
Эффект, как показано на рисунке:
холм
Hill Password - это пароль для замены, который использует основной принцип теории матрицы. Написано на основе таблицы 5*5 квадратных шифров, с 25 буквами, расположенными в таблице. Для 26 букв на английском языке удалите наиболее часто используемый Z для формирования таблицы паролей.
Идеи реализации:
1. Напишите алфавит
var chars = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'w' w ',' 'x', '' 'z', '' ',' 'z', '' z ',' z ',' z ',' z ',', ',' u ',' w ',' x ',' z ',', ',' u ',', 'w', 'Z
2. Случайно генерируйте ключи
Кода -копия выглядит следующим образом:
/*
* Функция: случайным образом генерировать ключи
*
* Возврат: матрица ключей
*/
функция randomCreateKey () {
// случайным образом генерируют числа от 0 до 26
для (var i = 0; i <3; i ++) {
for (var j = 0; j <3; j ++) {
Ключ [i] [j] = math.round (math.random ()*100%26)
}
}
}
3. Код клавиши, обработайте простой текст на основе автоматически сгенерированного ключа:
Кода -копия выглядит следующим образом:
/*
* Функция: алгоритм холма
*
* Параметры: массив верхней регистрации с кратными длина 3
*
* Возврат: зашифрованная строка
*/
Функциональный холм (P) {
// Текст заглавных букв
var res = "";
// Разработать общее количество раз, когда строка необходимо пройти через
var Round = math.round (p.length/3);
//иметь дело с
for (var b = 0; b <раунд; B ++) {
// простой текст 3
var temp3 = "";
var temparr3 = [];
var Sumarr3 = [];
для (var i = 0; i <3; i ++) {
temp3 += p.shift ();
for (var j = 0; j <chars.length; j ++) {
if (temp3 [i] == chars [j])
Temparr3 [i] = j;
}
}
// Рассчитайте
для (var i = 0; i <3; i ++) {
for (var j = 0; j <3; j ++) {
sumarr3 [i] = (temparr3 [j]*key [i] [j])%26;
}
}
// Получить соответствующий индекс символов в алфавите
для (var i = 0; i <3; i ++) {
res += chars [sumarr3 [i]];
}
}
вернуть Res;
};
Эффект, как показано на рисунке:
Вышеуказанные алгоритмы имеют недостатки:
1. Процесс-ориентированный дизайн, высокая степень связи
2. Слишком много вложенных петель, необходимо оптимизировать эффективность алгоритма
3. Неадекватное рассмотрение возможных ситуаций, таких как не обработка, когда пользователь вводит неаллектронные символы.
Суммировать:
После изучения курса введения в информационную безопасность в течение определенного периода времени я могу понять только основы информационной безопасности. Информационная безопасность - очень интересная тема. Когда вы сталкиваетесь с некоторыми проблемами, подумайте как можно больше, делайте больше и используйте больше. В то же время мы также должны укрепить накопление математической основы, консолидировать Фонд JS и расширить знания. Этой дороге предстоит пройти долгий путь.