Потоковий шифр на основі генератора BBS

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2012
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Криптологія

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки, молоді та спорту України Національний університет «Львівська Політехніка» Звіт Про виконання лабораторної роботи №1 з курсу «Прикладна криптологія» на тему «Потоковий шифр на основі генератора BBS» Перевірив: Петришин А.В. Львів – 2012 Мета: Створити потоковий шифр з використанням програмного генератора псевдовипадкових послідовностей BBS. Завдання: Скласти програму, яка б реалізовувала шифрування та розшифрування на основі генератора BBS. Код програми на мові JavaScript: <html><head><title>asdf</title></head> <body><form name="asdf"><input type=text name="text"><br> p = <input type=text name="pq"> <span class="key" id="1"></span><br> q = <input type=text name="qp"> <span class="key" id="2"></span><br> x = <input type=text name="xp"> <span class="key" id="3"></span><br> <input type="button" value="Зашифрувати" onclick='Encrypt();'> <input type="button" value="Розшифрувати" onclick='Decrypt();'> </form><script> function Encrypt( ){var text = document.asdf.text.value.toLowerCase(); var cryptotext=""; var mass = new Array( 101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191, 193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283, 293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401, 409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509, 521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631, 641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751, 757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877, 881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997); p = Math.floor(Math.random()*900)+100; while (p%4!=3) p++; q = Math.floor(Math.random()*900)+100; while (q%4!=3) q++; var x=0; do {x = Math.floor(Math.random()*143); x=mass[x];} while ((x==p)||(x==q)); var n = p * q; var p_span = document.getElementById(1); var q_span = document.getElementById(2); var x_span = document.getElementById(3); q_span.innerHTML = q; p_span.innerHTML = p; x_span.innerHTML = x; text=Convert(text);for(i=0;i<text.length;i++) {x=(x*x)%n; s=x%2; cryptotext+=(text.charAt(i)*1+s*1)%2+"";}m="";text="";for(i=0;i<cryptotext.length;i++) {m+=cryptotext.charAt(i); if(m.length==5) {text+=n2l(m);m="";}}alert(text);} function Decrypt( ){var p=document.asdf.pq.value; var q=document.asdf.qp.value;var x=document.asdf.xp.value; var n=p*q;var text=document.asdf.text.value.toLowerCase(); var text=Convert(text);var cryptotext="";var m=""; for(i=0;i<text.length;i++) {x=(x*x)%n; s=x%2; cryptotext+=(text.charAt(i)*1+s*1)%2+"";} text="";for(i=0;i<cryptotext.length;i++) {m+=cryptotext.charAt(i); if(m.length==5) {text+=n2l(m);m="";}}alert(text);} function Convert(a){var b = "";for(i=0;i<a.length;i++) {b+=l2n(a.charAt(i));}return b;} function l2n(l){switch (l) { case 'а': return '00000'; break;case 'б': return '00001'; break;case 'в': return '00010'; break; case 'г': return '00011'; break;case 'д': return '00100'; break;case 'е': return '00101'; break; case 'є': return '00110'; break;case 'ж': return '00111'; break;case 'з': return '01000'; break; case 'и': return '01001'; break;case 'і': return '01010'; break;case 'ї': return '01011'; break; case 'й': return '01100'; break;case 'к': return '01101'; break;case 'л': return '01110'; break; case 'м': return '01111'; break;case 'н': return '10000'; break;case 'о': return '10001'; break; case 'п': return '10010'; break;case 'р': return '10011'; break;case 'с': return '10100'; break; case 'т': return '10101'; break;case 'у': return '10110'; break;case 'ф': return '10111'; break; case 'х': return '11000'; break;case 'ц': return '11001'; break;case 'ч': return '11010'; break; case 'ш': return '11011'; break;case 'щ': return '11100'; break;case 'ь': return '11101'; break; case 'ю': return '11110'; break;case 'я': return '11111'; break;default: return "";}} function n2l(n){switch (n) { case '00000': return 'а'; break;case '00001': return 'б'; break;case '00010': return 'в'; break; case '00011': return 'г'; break;case '00100': return 'д'; break;case '00101': return 'е'; break; case '00110': return 'є'; break;case '00111': return 'ж'; break;case '01000': return 'з'; break; case '01001': return 'и'; break;case '01010': return 'і'; break;case '01011': return 'ї'; break; case '01100': return 'й'; break;case '01101': return 'к'; break;case '01110': return 'л'; break; case '01111': return 'м'; break;case '10000': return 'н'; break;case '10001': return 'о'; break; case '10010': return 'п'; break;case '10011': return 'р'; break;case '10100': return 'с'; break; case '10101': return 'т'; break;case '10110': return 'у'; break;case '10111': return 'ф'; break; case '11000': return 'х'; break;case '11001': return 'ц'; break;case '11010': return 'ч'; break; case '11011': return 'ш'; break;case '11100': return 'щ'; break;case '11101': return 'ь'; break; case '11110': return 'ю'; break;case '11111': return 'я'; break;default: return "";}} </script></body></html> Результати роботи програми. Зашифровка тексту:  Розшифровка тексту:  Висновок. Я ознайомився з принципом роботи потокових шифрів і програмно реалізував такий шифр, що використовує генератор ключів на основі алгоритму BBS. Програма перетворює вхідне повідомлення таким чином: 32 букви укр. алфавіту (г = ґ) приводяться до нижнього регістру і перетворюються у 5-бітові послідовності, а всі знаки, символи, цифри і пробіли ігноруються.
Антиботан аватар за замовчуванням

24.01.2013 00:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!