Шифрование алгоритмом Трисемуса. Лабораторная работа по дисциплине Информационная безопасность и защита информации
Скачать 1.05 Mb.
|
Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования «Брянский государственный инженерно-технологический университет» Кафедра «Информационные технологии» Лабораторная работа по дисциплине: «Информационная безопасность и защита информации» Вариант №21 Шифрование методом алгоритм Трисемуса ЛР-02068025-09.03.02-037.22 Автор работы: ______________ Максимов Сергей Алексеевич Группа: ИСТ-401 № Зачётной книжки: 18-2.037 Руководитель работы ______________ к.т.н., доц. Б. Н. Прусс Нормоконтроль ______________ к.т.н., доц. Б. Н. Прусс Доступ к защите: «__»_________ ______________ к.т.н., доц. Б. Н. Прусс Дата защиты: «__»_________ ______________ Оценка _____________ Брянск 2022 СОДЕРЖАНИЕ1. ИНДИВИДУАЛЬНОЕ ЗАДАНИ 3 2. РЕАЛИЗАЦИЯ ПРОГРАММЫ НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ 4 1. ИНДИВИДУАЛЬНОЕ ЗАДАНИЦель работы: изучение шифрования симметричными методами простых замен и их применение для обеспечения конфиденциальности текстовых файлов. Индивидуальное задание: разработка программы для шифрования сообщений методом Трисемуса. Алфавит 10 символов (числа от 0 до 9). 2. РЕАЛИЗАЦИЯ ПРОГРАММЫ НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯПри выполнении работы был использован был использован язык программирования TypeScript и JavaScript-библиотека с открытым исходным кодом для разработки SPA (Single Page Application) приложений. Пример работы программы представлен на рисунке 1. Рисунок 1 - Пример работы программы В листинге 1 можно ознакомиться с кодом программы. Данный программный код принимает и зашифровывает введенное нами слово. Листинг 1 – App.tsx const [word, setWord] = useState('0548'); const [shifr, setShifr] = useState('6436'); const [maxWidth, setmaxWidth] = useState('2'); const [maxHeight, setmaxHeight] = useState('5') const [answer, setAnswer] = useState('0000'); const [table, setTable] = useState const handleSubmit = (event:any) => { event.preventDefault(); let alphabet:Array<string> = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], keyWordArr: Array<string> = shifr.split(''), shifrTable: Array const setShifrTable = () => { let newInputText:Array<string> = word.split(''), buffResult = []; for(let i = 0; i < newInputText.length; i++){ for(let i1 = 0; i1 < +maxHeight; i1++){ let flag:boolean = false; for(let j = 0; j < +maxWidth; j++) { if(newInputText[i] === shifrTable[i1][j]) { if(i1 < +maxHeight - 1) { buffResult[i] = shifrTable[i1 + 1][j]; } else { buffResult[i] = shifrTable[0][j]; } flag = true; break; } } if (flag) break; } } return buffResult.join('') } const getShifrText = () => { let buff:Array<string> = keyWordArr.concat(alphabet); buff = buff.filter((i, index) => buff.indexOf(i) === index) for(let i = 0; i < +maxHeight; i++){ // @ts-ignore shifrTable.push(i); shifrTable[i] = [] for(let j = 0; j < +maxWidth; j++){ shifrTable[i].push(buff[0]); buff.shift(); } } console.log(shifrTable) return shifrTable; } setTable(getShifrText()) setAnswer(setShifrTable()) } Данный алгоритм разбит на две части. Первая часть разбивает строку с ведённым ключом на строковый массив, соединяет полученный массив с «алфавитом» и убирает повторяющиеся числа. После выполнения фильтрации с помощью вложенного цикла for заполняется двухмерный массив. Вторая часть программы разбивает строку с веденным словом для шифровки на строковый массив после чего благодаря вложенным циклам for производится шифровка, после работы цикла мы получаем новый массив с зашифрованным числом. В конце массив преобразуется в строковое значение. |