180 likes | 540 Views
საქართველოს ტექნიკური უნივერსიტეტი. ტექსტების შიფრაციის მატრიცული და პოლიბიას მეთოდების პროგრამული უზრუნველყოფა. Georgian Technical University. გიორგი ლობჟანიძე. მატრიცული მეთოდი და მისი არსი. დასაშიფრი ტექსტი:. შეტევა განახორციელეთ მარცხენა ფლანგიდან.
E N D
საქართველოს ტექნიკური უნივერსიტეტი ტექსტების შიფრაციის მატრიცული და პოლიბიას მეთოდების პროგრამული უზრუნველყოფა Georgian Technical University გიორგი ლობჟანიძე
მატრიცული მეთოდი და მისი არსი დასაშიფრი ტექსტი: შეტევა განახორციელეთ მარცხენა ფლანგიდან • გამოითვლება მატრიცის ოპტიმალური განზომილებები ( M * N ) >= ტექსტში ასოების რაოდენობა მიმდინარეობს ტექსტის მატრიცაში შეტანა ( სტრიქონულად ) ამ კონკრეტულ შემთხვევაში მატრიცის განზომილებებია M = 7 და N = 6 ტექსტში ასოების რაოდენობის შესაბამისად
მიმდინარეობს ტექსტის მატრიციდან გამოტანა ( შვეულად ) დაშიფრული ტექსტი: შ ოეცფდეგრთხლატაც ეანენიმნნ*ვაეააგ*ახლრ ი*
მეთოდის გაუმჯობესება ტექსტის შეტანა სტრიქონების გარკვეული თანმიმდევრობით: 7 5 4 6 2 3 1 7 5 6 3 2 4 1
ტექსტის გამოტანა სვეტების გარკვეული თანმიმდევრობით: 4 6 5 1 3 2 6 5 1 3 4 2 ტექსტის გასაშიფრი გასაღებების რაოდენობა ხდება: M! x N! ამ კონკრეტულ შემთხვევაში: 7! x 6! = 3628800 დაშიფრული ტექსტი: *ნნინმე* ილხრა*აგეაავდცფო ეშნეაცა ტახლრგთე
მატრიცული მეთოდით დაშიფრული ტექსტის გაშიფრვა გასაშიფრი ტექსტი: შ ოეცფდეგრთხლატაც ეანენიმნნ*ვაეააგ*ახლრ ი* ტექსტის სვეტებში შეტანა ტექსტის სტრიქონებიდან გამოტანა გაშიფრული ტექსტი: შეტევა განახორციელეთ მარცხენა ფლანგიდან***
მატრიცული მეთოდის პროგრამული უზრუნველყოფა კლასის მოდელი კლასის სახელი private ატრიბუტები public მეთოდები
while(true) { if(( i * i) >= text.length() ) { m=i; n=i; if( (i * (i-1)) >= text.length() ) { n = (i-1); } break; } i++; } coding( ) მეთოდის სტრუქტურა და რეალიზაცია მატრიცის ოპტიმალური განზომილებების გამოთვლა int index = 0; for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { if(index >= text.length()) letters[i][j] = "*"; else letters[i][j] = text.substr(index,1); index++; } } ტექსტის სტრიქონულად შეტანა მატრიცაში მატრიციდან ტექსტის გამოტანა სვეტებად for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { codedText += letters[j][i]; } } დაშიფრული ტექსტის მიღება
enCoding(stringtextOfEncode, introw, intcol ) მეთოდის სტრუქტურა და რეალიზაცია მატრიცის განზომილებების აღდგენა გადაცემული პარამეტრებით constint m = row; constint n = col; for(int i=0, index = 0; i<n; i++) { for(int j=0; j<m; j++) { letters[j][i] = textOfEncode.substr(index,1); index++; } } ტექსტის შეტანა მატრიცაში შვეულად ტექსტის გამოტანა მატრიციდან სტრიქონულად for(int i = 0; i<m; i++) { for(int j = 0; j<n; j++) { enCodedText += letters[i][j]; } } საწყისი ტექსტის აღდგენა
codingWithKey() მეთოდის სტრუქტურა და რეალიზაცია მატრიცის ოპტიმალური განზომილებების გამოთვლა for(int i = 0; i<row; i++) { cout<<"\tRow["<<i<<"] Key: "; cin>>rowKey[i]; } სტრიქონების შეტანის თანმიმდევრობის მიღება მომხმარებლისგან for(int i=0; i<row; i++) { for(int j=0; j<col; j++) { if( index >= text.length() ) letters[rowKey[i]][j] = "*"; else letters[rowKey[i]][j] = text.substr(index,1); index++; } } ტექსტის შეტანა სტრიქონულად მომხმარებლის მიერ მითითებული თანმიმდევრობით
for(int i=0; i<col; i++) { cout<<"\tCol["<<i<<"] Key: "; cin>>colKey[i]; } სვეტების გამოტანის თანმიმდევრობის მიღება მომხმარებლისგან ტექსტის გამოტანა შვეულად მომხმარებლის მიერ მითითებული თანმიმდევრობით for(int i=0; i<col; i++) { for(int j=0; j<row; j++) { codedWithKeyText += letters[j][colKey[i]]; } } დაშიფრული ტექსტის მიღება
enCodingWithKey(stringtextOfEncode, introw, intcol )მეთოდის სტრუქტურა და რეალიზაცია მატრიცის განზომილებების აღდგენა გადაცემული პარამეტრებით constint m = row; constint n = col; for(int i=0; i<n; i++) { cout<<"\tCol["<<i<<"] Key: "; cin>>colKey[i]; } სვეტების შეტანის თანმიმდევრობის მიღება მომხმარებლისგან for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { letters[j][colKey[i]] = textOfEncode.substr(index,1); index++; } } მატრიცის აღდგენა for(int i=0; i<m; i++) { cout<<"\tRow["<<i<<"] Key: "; cin>>rowKey[i]; } სტრიქონების გამოტანის თანმიმდევრობის მიღება მომხმარებლიდან for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { enCodedText += letters[rowKey[i]][j]; } } საწყისი ტექსტის აღდგენა
პოლიბიას მეთოდი და მისი არსი დასაშიფრი ტექსტი: მტერი მარცხენა ფლანგზეა ანბანი შიფრაციის წესი ა ბ გ დ ე ვ თითოეული ასო იცვლება მისი კოორდინატებით ა იცვლება მ ბვ ბ გ დაშიფრული ტექსტი: დ ბვდააეგებგვდბვააგეეგვააეგააავდდგბეააგააგბააეაა ე ვ
პოლიბიას მეთოდით დაშიფრული ტექსტის დეშიფრაცია გასაშიფრი ტექსტი: ბვდააეგებგვდბვააგეეგვააეგააავდდგბეააგააგბააეაა დეშიფრაციის წესი ბვ ა ბ გ დ ე ვ ა ვ ბ ბ გ მ დ ე გაშიფრული ტექსტი: ვ მტერი მარცხენა ფლანგზეა
პოლიბიას მეთოდის პროგრამული უზრუნველყოფა კლასის სახელი კლასის მოდელი private ატრიბუტები public მეთოდები
polibiaCoding( ) მეთოდის სტრუქტურა და რეალიზაცია const string alphabet[6][6] = { {"a","b","g","d","e","v"}, {"z","T","i","k","l","m"}, {"n","o","p","J","r","s"}, {"t","u","f","q","R","y"}, {"S","C","c","Z","w","W"}, {"x","j","h"," ",".",","} }; const string rowLetters[6] = {"a","b","g","d","e","v"}; const string colLetters[6] = {"a","b","g","d","e","v"}; ანბანის და კოორდინატების აღწერა სიმბოლოების ძიება ანბანში და მათი ჩანაცვლება შესაბამისი კოორდინატებით for(int a=0; a<text.length(); a++) { letter = text.substr(a,1); for(int i=0; i<6; i++) //find current element { for(int j=0; j<6; j++) { if( letter == alphabet[i][j] ) { temp = rowLetters[i] + colLetters[j]; codedText += temp; } } } } დაშიფრული ტექსტის მიღება
polibiEnCoding( string textOfEncode) მეთოდის სტრუქტურა და რეალიზაცია ანბანის და კოორდინატების აღწერა ტექსტიდან ასოების წყვილ-წყვილად ამოჭრა და მათი ჩანაცვლება ანბანში შესაბამის კოორდინატებზე მდებარე ასოთი for(int i=0; i<textOfEncode.length()/2; i++) { txt1 = textOfEncode.substr(index,1); txt2 = textOfEncode.substr((index+1),1); for(int j=0; j<6; j++) { if(txt1 == rowLetters[j]) rowLetter = j; if(txt2 == colLetters[j]) colLetter = j; } enCodedText += alphabet[rowLetter][colLetter]; index+=2; } დაშიფრული ტექსტის მიღება