სსსსსსსსსსს სსსსსსსსს სსსსსსსსსსსს Georgian Technical University ტტტტტტტტტ ტტტტტტტტტ ტტტტტტტტტ ტტ ტტტტტტტტ ტტტტტტტტტ ტტტტტტტტტტ ტტტტტტტტტტტტ სსსსსს სსსსსსსსს
Jan 02, 2016
საქართველოს ტექნიკური უნივერსიტეტი
Georgian Technical University
ტექსტების შიფრაციის მატრიცული და პოლიბიას მეთოდების პროგრამული უზრუნველყოფა
გიორგი ლობჟანიძე
მატრიცული მეთოდი და მისი არსი :დასაშიფრი ტექსტი
შეტევა განახორციელეთ მარცხენა ფლანგიდან
გამოითვლება მატრიცის ოპტიმალური განზომილებები
( M * N ) >= ტექსტში ასოების რაოდენობა
( )მიმდინარეობს ტექსტის მატრიცაში შეტანა სტრიქონულად
შ ე ტ ე ვ ა
გ ა ნ ა ხ
ო რ ც ი ე ლ
ე თ მ ა რ
ც ხ ე ნ ა
ფ ლ ა ნ გ ი
დ ა ნ * * *
ამ კონკრეტულ შემთხვევაში მატრიცის
განზომილებებია
M = 7 და N = 6
ტექსტში ასოების რაოდენობის შესაბამისად
( )მიმდინარეობს ტექსტის მატრიციდან გამოტანა შვეულად
შ ე ტ ე ვ ა
გ ა ნ ა ხ
ო რ ც ი ე ლ
ე თ მ ა რ
ც ხ ე ნ ა
ფ ლ ა ნ გ ი
დ ა ნ * * *
:დაშიფრული ტექსტი * * შ ოეცფდეგრთხლატაც ეანენიმნნ ვაეააგ ახლრ*ი
მეთოდის გაუმჯობესება
: ტექსტის შეტანა სტრიქონების გარკვეული თანმიმდევრობით 7 5 4 6 2 3 1
დ ა ნ * * *
ც ხ ე ნ ა
ფ ლ ა ნ გ ი
ო რ ც ი ე ლ
გ ა ნ ა ხ
ე თ მ ა რ
შ ე ტ ე ვ ა1
2
4
5
7
3
6
: ტექსტის გამოტანა სვეტების გარკვეული თანმიმდევრობით 4 6 5 1 3 2
დ ა ნ * * *
ც ხ ე ნ ა
ფ ლ ა ნ გ ი
ო რ ც ი ე ლ
გ ა ნ ა ხ
ე თ მ ა რ
შ ე ტ ე ვ ა
1 234 56
:დაშიფრული ტექსტი* * * ნნინმე ილხრა აგეაავდცფო ეშნეაცატახლრგთე
ტექსტის გასაშიფრი გასაღებების
:რაოდენობა ხდება
M! x N!
ამ კონკრეტულ:შემთხვევაში
7! x 6! = 3628800
მატრიცული მეთოდით დაშიფრული ტექსტის გაშიფრვა
შ ე ტ ე ვ ა
გ ა ნ ა ხ
ო რ ც ი ე ლ
ე თ მ ა რ
ც ხ ე ნ ა
ფ ლ ა ნ გ ი
დ ა ნ * * *
* * შ ოეცფდეგრთხლატაც ეანენიმნნ ვაეააგ ახლრ*ი
შ ე ტ ე ვ ა
გ ა ნ ა ხ
ო რ ც ი ე ლ
ე თ მ ა რ
ც ხ ე ნ ა
ფ ლ ა ნ გ ი
დ ა ნ * * *
ტექსტის სვეტებში შეტანა ტექსტის სტრიქონებიდან გამოტანა
: გასაშიფრი ტექსტი
:გაშიფრული ტექსტი შეტევა განახორციელეთ მარცხენა
***ფლანგიდან
მატრიცული მეთოდის პროგრამული უზრუნველყოფა
Codestring text; //საწყისი ტექსტი
string codedText; //დაშიფრული ტექსტი
string codedWithKeyText; //მომხმარებლის გასაღებით დაშიფრული ტექსტი
string Coding(); // შიფრაცია
string enCoding(string textOfEncode ,int rows, int cols); // დეშიფრაცია
string codingWithKey(); // შიფრაცია
string enCodingWithKey(string textOfEncode ,int rows, int cols); // დეშიფრაცია
კლასისსახელი
private
ატრიბუტები
public
მეთოდები
კლასის მოდელი
coding( ) მეთოდის სტრუქტურა და რეალიზაცია
მატრიცის ოპტიმალური განზომილებების
გამოთვლა
ტექსტის სტრიქონულად შეტანა მატრიცაში
მატრიციდან ტექსტის გამოტანა სვეტებად
დაშიფრული ტექსტისმიღება
while(true){ if(( i * i) >= text.length() ) { m = i; n = i; if( (i * (i-1)) >= text.length() ) { n = (i-1); } break; } i++; }
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(string textOfEncode, int row, int col ) მეთოდის სტრუქტურა და რეალიზაცია
მატრიცის განზომილებების აღდგენა გადაცემული
პარამეტრებით
const int m = row;const int 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(string textOfEncode, int row, int col ) მეთოდის სტრუქტურა და რეალიზაცია
მატრიცის განზომილებების აღდგენა გადაცემული
პარამეტრებით
სვეტების შეტანის თანმიმდევრობის მიღება
მომხმარებლისგან
მატრიცის აღდგენა
სტრიქონების გამოტანის თანმიმდევრობის მიღება
მომხმარებლიდან
საწყისი ტექსტის აღდგენა
const int m = row;const int 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]; }}
პოლიბიას მეთოდი და მისი არსი
:დასაშიფრი ტექსტი
მმ ტერი მარცხენა ფლანგზეა
ა ბ გ დ ე ვ
ზ თ ი კ ლ მმ
ნ ო პ ჟ რ ს
ტ უ ფ ქ ღ ყ
შ ჩ ც ძ წ ჭ
ხ ჯ ჰ . ,
ანბანი
ა ბ გ დ ე ვ
ა
ბ
გ
დ
ე
ვ
შიფრაციის წესი
თითოეული ასო იცვლება მისი თითოეული ასო იცვლება მისიკოორდინატებითკოორდინატებით
მმ ბვბვიცვლება
:დაშიფრული ტექსტი
ბვდააეგებგვდბვააგეეგვააეგააავდდგბეააგააგბააეაა
პოლიბიას მეთოდით დაშიფრული ტექსტის დეშიფრაცია
:გასაშიფრი ტექსტი
ბვბვდააეგებგვდბვააგეეგვააეგააავდდგბეააგააგბააეაა
დეშიფრაციის წესი
ბვბვ
ვვბბა ბ გ დ ე ვ
ზ თ ი კ ლ მმ
ნ ო პ ჟ რ ს
ტ უ ფ ქ ღ ყ
შ ჩ ც ძ წ ჭ
ხ ჯ ჰ . ,
ა ბ გ დ ე ვვ
ა
ბბ
გ
დ
ე
ვ
მმ
მმ ტერი მარცხენა ფლანგზეა
:გაშიფრული ტექსტი
პოლიბიას მეთოდის პროგრამული უზრუნველყოფა
კლასის მოდელი
Codestring text; //საწყისი ტექსტი
string codedText; //დაშიფრული ტექსტი
void polibiaCoding(); // შიფრაცია
string polibiaEnCoding(string textOfEncode); // დეშიფრაცია
კლასისსახელი
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;}