Криптографічні системи та протоколи

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

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

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

Рік:
2012
Тип роботи:
Лабораторна робота
Предмет:
Криптографічні системи та протоколи

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

Міністерство освіти і науки України Національний університет «Львівська Політехніка» Інститут комп’ютерних технологій автоматики та метрології Кафедра Безпеки Інформаційних Технологій  Звіт Про виконання лабораторної роботи № 1 “Криптографічні системи та протоколи” Львів 2012 Мета роботи: Вивчити основні характеристики шифрів підстановки і навчитися розробляти програмне забезпечення для реалізації алгоритмів шифрування з використанням шифрів підстановки на комп’ютері. Завдання: 1) Вивчити основні алгоритми шифрування, що використовують моноалфавітні та поліалфавітні підстановки. 2) Скласти блок-схеми алгоритмів та програму для реалізації шифру Плейфера. 3) Скласти блок-схеми алгоритмів та програму для реалізації зашифрування та розшифрування відкритого тексту величиною приблизно два аркуші формату А4 за допомогою шифру з автоключем і багатоконтурної системи Віженера з періодом n=5. Забезпечити введення ключа шифрування з клавіатури. Блок-схема: Остаточна версія програми: import java.util.Scanner; class laba{ public static void main(String[] args) { Scanner in = new Scanner(System.in);//Input code word System.out.println("Enter code word:"); String str = in.nextLine(); str=str.toLowerCase(); char[] vh=str.toCharArray(); int lens=str.length(); int k=0; M41: for(int i=0; i<lens; i++) { for (int j=i+1;j<lens;j++) { if (vh[i]==vh[j]|(int)vh[i]<96|(int)vh[i]>122) { k++; continue M41; } } } int len=lens-k; char [] ch=new char [len]; k=1; ch[0]=vh[0]; MP: for(int i=1;;i++) { for(int j=0;j<i;j++) { if (k==len) break MP; if (vh[i]==vh[j]|(int)vh[i]<96|(int)vh[i]>122) continue MP; if (j==i-1) { ch[k]=vh[i]; k++; } } } if(len>25)//Check the maximum number of code { System.out.println("Err key"); return; } for(int i=0;i<len;i++)//Change j - i { if((int)ch[i]==106) ch[i]--; } for(int i=97;i<123;i++)//Check duality { int kilk=0; for(int j=0;j<len;j++) { if ((int)ch[j]==i) { kilk++; if (kilk>1) { System.out.println("Err key"); return; } } } } int [][] mach=new int [5][5]; int i=0; k=0; for(int j=0;j+i*5<len;j++)//Code to the array { if (ch[k]==106) ch[k]=105; if(ch[k]>10+96) mach[i][j]=ch[k]-97; else mach[i][j]=ch[k]-96; k++; if(j==4) { j=-1; i++; } } if (len!=25)//Check code=25 { ///////////////////////////////////////////////////////////////////// for(int buk=1;buk<27;buk++)//Insert letters to array M1: { if (i>4) break; i=0; for(int j=0;j<5;j++) { if(mach[i][j]==0) { mach[i][j]=buk; break M1; } else if(mach[i][j]==buk) break M1; if(j==4) { i++; j=-1; if (i>4) break M1; } } } } ///////////////////////////////////////////////////////////////////// Scanner inn = new Scanner(System.in);//Input text System.out.println("Vvedit text povidomlennja:"); String tex = inn.nextLine(); tex=tex.toLowerCase(); lens=tex.length(); char[] texc=tex.toCharArray(); ////////////////////////////////////////////////////////////////////// int inwi=0; M41: for(i=0; i<lens; i++) { // for (int j=i+1;j<lens;j++) // { if ((int)texc[i]<96|(int)texc[i]>122) { inwi++; continue M41; } // } } int lental=lens; int lent=lens-inwi; ////////////////////////////////////////////////////////////////////// for(i=0;i<lental;i++)//Change j - i { if(texc[i]==106) texc[i]--; else if(texc[i]>105) texc[i]--; } //////////////////////////////////////////////////////////////////////// int podv=0;//Check duality for(i=0;i<lental-1;i++) { if(texc[i]==texc[i+1]) { podv++; if(i>lental-1) { if(texc[i+1]==texc[i+2]) { podv++; i++; } } } else if(texc[i+1]<96|texc[i+1]>122) { if(texc[i+1]==lental) continue; if(texc[i]==texc[i+2]) { podv++; i++; } } } lent=lent+podv; int dima=lent;//perev na parnist int ost=lent%2; if (ost!=0) { dima++; } k=0; int[] texn=new int [dima]; int d=0; //Insert texc to texn for(i=0;i<lental+1;i++) //Check of the double letters { // if(d==58) // { // if(i==10) // dima=1; // } if(i!=lental) if(texc[i]<96|texc[i]>122) continue; int p=0; if (i<lental-1) if(texc[i]==texc[i+1]) { p++; texn[d]=texc[i]-96; i++; d++; texn[d]=16; d++; texn[d]=texc[i]-96; d++; } else if(texc[i+1]<96|texc[i+1]>122) { if(texc[i+2]<96|texc[i+2]>122) if(texc[i]==texc[i+3]) { p++; texn[d]=texc[i]-96; i++; d++; texn[d]=16; d++; texn[d]=texc[i+1]-96; d++; k++; } if(texc[i]==texc[i+2]) { p++; texn[d]=texc[i]-96; i++; d++; texn[d]=16; d++; texn[d]=texc[i+1]-96; d++; k++; } } if(p==0) { if(i<lental) { if(texc[i]<96|texc[i]>122) texn[d]=texc[i+1]-96; else if(k!=0) { if(texc[i+1]<96|texc[i+1]>122) { i++; k=0; continue; } texn[d]=texc[i+1]-96; k=0; i++; } else texn[d]=texc[i]-96; d++; } if(i==lental) if(ost!=0) { if(texn[d-1]==1) texn[d]=2; if(texn[d-1]!=1) texn[d]=1; i++; } } } ////////////////////////////////////////////////////////////////// int[]x1=new int [2]; int[]x2=new int [2]; int[] crypt=new int [texn.length]; int j=0; M2: for(i=0;i<texn.length;i+=2) //Search the letters in the array { j=0; for(int n=0;n<2;n++) { x1[n]=-1; x2[n]=-1; } for(d=0;d<5;d++) { if (texn[i]==mach[j][d]) { x1[0]=j; x1[1]=d; } if (texn[i+1]==mach[j][d]) { x2[0]=j; x2[1]=d; } if (d==4) { j++; d=-1; } if(x1[0]!=-1&x2[0]!=-1) { //System.out.println("AEEEEEEE!!!!!!!"); if(x1[0]==x2[0])//If numbers are in column { if (x1[1]==4) { crypt[i]=mach[x1[0]][0]; crypt[i+1]=mach[x2[0]][x2[1]+1]; } else if(x1[1]!=4&x2[1]!=4) { crypt[i]=mach[x1[0]][x1[1]+1]; crypt[i+1]=mach[x2[0]][x2[1]+1]; } else if(x2[1]==4) { crypt[i]=mach[x1[0]][x1[1]+1]; crypt[i+1]=mach[x2[0]][0]; } } else if(x1[1]==x2[1])//If numbers are in line { if (x1[0]==4) { crypt[i]=mach[0][x1[1]]; crypt[i+1]=mach[x2[0]+1][x2[1]]; } else if(x1[0]!=4&x2[0]!=4) { crypt[i]=mach[x1[0]+1][x1[1]]; crypt[i+1]=mach[x2[0]+1][x2[1]]; } else if(x2[0]==4) { crypt[i]=mach[x1[0]+1][x1[1]]; crypt[i+1]=mach[0][x2[1]]; } } else if(x1[1]!=x2[1]&x1[0]!=x2[0])//If numbers are in square { crypt[i]=mach[x1[0]][x2[1]]; crypt[i+1]=mach[x2[0]][x1[1]]; } continue M2; } } } System.out.println("\nPlayfair cipher:"); for(i=0;i<crypt.length;i++)//Output cryptograms { if(crypt[i]>8) crypt[i]+=97; else crypt[i]+=96; System.out.print((char)crypt[i]); } char[] vhvi=new char [lental-inwi]; d=0; for(i=0;i<lental;i++) { if(d==lental-inwi) break; if((int)vh[i]<96|(int)vh[i]>122) { i++; } vhvi[d]=vh[i]; d++; if (i==len-1) i=-1; } char[] cryptwi=new char [lental-inwi]; d=0; for(i=0;i<lental;i++) { if(texc[i]<96|texc[i]>122) continue; // if(texc[i]>105) // texc[i]++; // if(vhvi[d]==105) // vhvi[d]++; cryptwi[d]=texc[i]; cryptwi[d]+=vhvi[d]-96; if(cryptwi[d]>122) cryptwi[d]-=26; d++; if(d>lental-inwi-1) break; } System.out.println("\n"); System.out.println("Vigenere cipher:"); for(i=0;i<cryptwi.length;i++)//Output cryptograms { System.out.print((char)cryptwi[i]); } char[] vhavt=new char [lental-inwi]; d=0; for(i=0;i<lental-inwi;i++) { if(d==lental-inwi) break; if((int)vh[i]<96|(int)vh[i]>122) { i++; } vhavt[d]=vh[i]; d++; if (i==len-1) for(k=0;k<lental-len;k++) { // if(texc[k]>105) // texc[k]++; if((int)texc[k]<96|(int)texc[k]>122) { i++; continue; } vhavt[d]=texc[k]; d++; } } char[] cryptavt=new char [lental-inwi]; d=0; for(i=0;i<lental;i++) { if(texc[i]<96|texc[i]>122) continue; cryptavt[d]=texc[i]; cryptavt[d]+=vhavt[d]-96; if(cryptavt[d]>122) cryptavt[d]-=26; d++; } System.out.println("\n\nCipher with autokey:"); for(i=0;i<cryptavt.length;i++)//Output cryptograms { System.out.print((char)cryptavt[i]); } } } Результати роботи програми:  Висновок: На даній лабораторній роботі я вивчити основні характеристики шифрів підстановки і навчився розробляти програмне забезпечення для реалізації алгоритмів шифрування з використанням шифрів підстановки на комп’ютері.
Антиботан аватар за замовчуванням

19.01.2013 18:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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