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

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

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

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

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

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

Міністерство освіти і науки України Національний університет «Львівська Політехніка» Інститут комп’ютерних технологій автоматики та метрології Кафедра Безпеки Інформаційних Технологій  Звіт Про виконання лабораторної роботи № 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:56

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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