|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Алматы, 2014гМИНЕСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ КАЗАХСТАН КАЗАХСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ ИМЕНИ аль - ФАРАБИ Механико-математический факультет Кафедра математического и компьютерного моделирования СРС На тему: «Шифр Виженера»
Выполнила: Есенқожа Ә. М. Проверил: Сергалиев А. С.
Алматы, 2014г Зашифрованный текст: Lw ci aan lfopx xo ppevz, le edoey: "Aih ahzvp in ele ptxtgi kimp, sdv?" Vro I, eliiotrg xset Qtri qfwt kpx mmo oa sir jlpsz qiam, lay sir fcsuble opx. Sci wtjso bt xc xllmr, lrd pzskzh et xsi Xemyldalplvl eny sms flk. Lp oajpvey sir rfxs eyh metwiiw, bpx whz hsugh roo mi oixttzh, aih sngc glprr tci gljwpv os qe, hmtc lpl lpv ysfftn trcmilwey. Xhdw aan eledv jimwe mziemnb. Snz xsrimyk, lzaeqic, ise mvrj dvcd lvxpv, ed I alw gilziik xhz ssuni, I alw nxlvtgio tj qmny Xmnd, wevxph jr e wiygh rper xsi yszv, plygcmyk vro tvpvmnb, aiol xhz rvevx Gawywmwvpweh ee hzv jezx. Ii lpl lpv gmqi, me aktperzh; mt dqagp hapksxem sed rpzem qsuih wo tlxizre a ptwtzrpv, wlze lpv aeelem. Eny lprzeoc olp cjvyir sq hzv pioxwi necm red soyqjey hmtc lpmjrow vro rvmdmnn, xhz rmfo zj cic vdwtxom, "Wcc hiy jsu ktze lpv olzwe?" M neth, eyh oevmnb zyt ey edksx-vrye wme, D senyio io es cmx. Olp mvr ecxiaxey ele qzret hmtcsfx yixyr, lrd wwmpkio io trtj sms tzgkzx.
Код на С++ (для определения повторяющихся биграмм или триграмм и составления таблицы с частотой для каждой буквы, и расшифровка текста после определения ключевого слова) #include <cstdlib>
#include <algorithm>
//#include <iostream>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <string>
using namespace std;
const int z = 5;
string res;
void lenkey(char *s){
ofstream pout1("proba.txt");
char a[1000][1000];
for(int i = 0; i < strlen(s); i++){
a[0][i + 1] = s[i];
}
for(int i = 0; i < strlen(s); i++){
a[i + 1][0] = s[i];
}
for(int i = 1; i < strlen(s) + 1; i++){
for(int j = i; j < strlen(s) + 1; j++){
if(a[0][i] == a[j][0])a[i][j] = 'x';
else a[i][j] = 'o';
}
}
int k = 0, l, size, max = -1;
string pods;
for(int i = 2; i < strlen(s) + 1; i++){
l = i;
k = 1;
while(k < strlen(s) + 1){
if(a[k][l] == 'x'){
size = 0;
while(a[k][l] == 'x'){
pods.push_back(a[0][l]);//pods[size] = a[0][l];
l++;
k++;
size++;
}
if(size >= max){
max = size;
res = pods;
pout1 << pods << " ";
}
pods = "";
}
l++;
k++;
}
}
}
int main() {
char str1[10000];
char tabl[300][100];
ifstream cin("002.txt");
ofstream cout("output.txt");
cin.getline(str1, 10000);
for(int i = 0; i < strlen(str1); i++){
if(str1[i] <= 90 && str1[i] >= 65)str1[i] += 32;
}
lenkey(str1);
cout << res << endl;
for(int i = 0; i < strlen(str1); i++){
tabl[i / z][i % z] = str1[i];
}
ofstream tout("tablica111.txt");
for(int i = 0; tabl[i][0]!= '\0'; i++){
for(int j = 0; j < z; j++){
tout << tabl[i][j] << "\t";
}
tout << "\n";
//if(tabl[i++][0] == '\0')k = i;
}
//tout << "\n"
cout << str1;
double M[z];
int num[100][z] = {0};
for(int i = 0; i < z; i++){
M[i] = strlen(str1)/z;
for(int j = 0; j < M[i]; j++){
num[(int)tabl[j][i] - 97][i]++;
//tout << endl << tabl[j][i];
}
}
tout << "\n------------------------------------\n";
for(int i = 0; i < 26; i++){
for(int j = 0; j < z; j++){
tout <<(char)(i + 97)<<": "<< num[i][j] << "\t";
}
tout << "\n";
//if(tabl[i++][0] == '\0')k = i;
}
double m[z] = {0};
for(int i = 0; i < z; i++){
for(int j = 0; j < 26; j++){
m[i] += (num[j][i] * (num[j][i] - 1));
}
m[i] /= M[i] * (M[i] - 1);
tout << m[i] << "\t";
}
string key = "leave";
char str2[10000];
cout << "\n__________________________________________________________________________________\n\n";
for(int i = 0; i < strlen(str1); i++){
if(str1[i] <= 122 && str1[i] >= 97){
if(((int)str1[i] - 97) - (int)key[i % z] + 97 >= 0)
str2[i] = (char)((int)str1[i] - (int)key[i % z] + 97);
else
str2[i] = (char)((int)str1[i] - (int)key[i % z] + 97 + 26);
}
else str2[i] = str1[i];
}
cout << str2;
return 0;
}
Повторяющиеся триграмм «lpv», встречается в тексте 4 раза, количество символов между ними 155, 85, 135. НОД(155, 85, 135) = 5.
Таблица таким образом получается:
l w c i a a n l f o p x x o p p e v z, l e e d o e y: " a i h a h z v p i n e l e p t x t g i k i m p , s d v ? " v r o i, e l i i o t r g x s e t q t r i q f w t k p x m m o o a s i r j l p s z q i a m, l a y s i r f c s u b l e o p x . s c i w t j s o b t x c x l l m r, l r d p z s k z h e t x s i x e m y l d a l p l v l e n y s m s f l k. l p o a j p v e y s i r r f x s e y h m e t w i i w , b p x w h z h s u g h r o o m i o i x t t z h , a i h s n g c g l p r r t c i g l j w p v o s q e, h m t c l p l l p v y s f f t n t r c m i l w e y. x h d w a a n e l e d v j i m w e m z i e m n b. s n z x s r i m y k, l z a e q i c, i s e m v r j d v c d l v x p v, e d i a l w g i l z i i k x h z s s u n i , i a l w n x l v t g i o t j q m n y x m n d, w e v x p h j r e w i y g h r p e r x s i y s z v, p l y g c m y k v r o t v p v m n b, a i o l x h z r v e v x g a w y w m w v p w e h e e h z v j e z x . i i l p l l p v g m q i, m e a k t p e r z h ; m t d q a g p h a p k s x e m s e d r p z e m q s u i h w o t l x i z r e a p t w t z r p v, w l z e l p v a e e l e m. e n y l p r z e o c o l p c j v y i r s q h z v p i o x w i n e c m r e d s o y q j e y h m t c l p m j r o w v r o r v m d m n n, x h z r m f o z j c i c v d w t x o m, " w c c h i y j s u k t z e l p v o l z w e? " m n e t h, e y h o e v m n b z y t e y e d k s x - v r y e w m e, d s e n y i o i o e s c m x. o l p m v r e c x i a x e y e l e q z r e t h m t c s f x y i x y r, l r d w w m p k i o i o t r t j s m s t z g k z x . Частоты букв для каждого столбца соответственно:
a: 1 a: 5 a: 11 a: 3 a: 3 b: 0 b: 0 b: 2 b: 4 b: 0 c: 4 c: 2 c: 3 c: 10 c: 3 d: 6 d: 0 d: 4 d: 8 d: 0 e: 14 e: 13 e: 22 e: 0 e: 14 f: 4 f: 2 f: 1 f: 0 f: 2 g: 0 g: 5 g: 2 g: 7 g: 0 h: 4 h: 6 h: 10 h: 0 h: 7 i: 0 i: 10 i: 17 i: 9 i: 17 j: 2 j: 4 j: 0 j: 7 j: 2 k: 0 k: 4 k: 2 k: 2 k: 5 l: 20 l: 7 l: 7 l: 0 l: 13 m: 2 m: 17 m: 5 m: 10 m: 8 n: 0 n: 0 n: 11 n: 9 n: 0 o: 10 o: 1 o: 8 o: 13 o: 1 p: 18 p: 7 p: 1 p: 5 p: 9 q: 6 q: 2 q: 0 q: 1 q: 3 r: 3 r: 8 r: 11 r: 1 r: 14 s: 13 s: 10 s: 7 s: 0 s: 7 t: 10 t: 1 t: 17 t: 3 t: 3 u: 0 u: 0 u: 5 u: 0 u: 0 v: 2 v: 11 v: 2 v: 14 v: 6 w: 4 w: 13 w: 2 w: 3 w: 7 x: 6 x: 14 x: 0 x: 3 x: 13 y: 8 y: 4 y: 0 y: 14 y: 2 z: 8 z: 4 z: 0 z: 19 z: 0 Теперь сдвигаем каждый столбец так, чтоб частоты букв соответствовали к среднестатистической частоте английского текста: 1-ый столбец сдвигаем на 11 позиции, 2-ой на 4, 3-ий на 0, 4-ый на 21, 5-ый на 4. И получается ключевое слово «leave». Остается расшифровать (последний цикл в коде):
string key = "leave";
char str2[10000]; for(int i = 0; i < strlen(str1); i++){
if(str1[i] <= 122 && str1[i] >= 97){
if(((int)str1[i] - 97) - (int)key[i % z] + 97 >= 0)
str2[i] = (char)((int)str1[i] - (int)key[i % z] + 97);
else
str2[i] = (char)((int)str1[i] - (int)key[i % z] + 97 + 26);
}
else str2[i] = str1[i];
}
Расшифрованный текст: as he was about to leave, he asked: "and where is the little girl, sir?" and i, thinking that mini must get rid of her false fear, had her brought out. she stood by my chair, and looked at the cabuliwallah and his bag. he offered her nuts and raisins, but she would not be tempted, and only clung the closer to me, with all her doubts increased. this was their first meeting. one morning, however, not many days later, as i was leaving the house, i was startled to find mini, seated on a bench near the door, laughing and talking, with the great cabuliwallah at her feet. in all her life, it appeared; my small daughter had never found so patient a listener, save her father. and already the corner of her little sari was stuffed with almonds and raisins, the gift of her visitor, "why did you give her those?" i said, and taking out an eight-anna bit, i handed it to him. the man accepted the money without demur, and slipped it into his pocket. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.036 сек.) |