Лабораторная - Шифрование с использованием тюремной азбуки - файл n3.doc

Лабораторная - Шифрование с использованием тюремной азбуки
Скачать все файлы (46.8 kb.)

Доступные файлы (3):
n1.cpp
n2.h
n3.doc84kb.04.06.2011 15:46скачать

n3.doc

Цель:

Изучение шифрования методом «тюремной азбуки».
Краткая теория:

Тюремная азбука - аналог квадрата Полибия.

Она позволяла путем перестукивания сообщаться заключенным разных камер. Эта азбука устроена так: в прямоугольник 6x5 вписываются буквы русского алфавита в обычном порядке следования, кроме букв ё, й, ъ. В результате получается таблица:

Каждая из основных букв русского алфавита (без букв ё, й, ъ) определяется па­рой чисел - номером строки и столбца. Поэтому вопрос: "Кто здесь?" изображается следую­щим образом: 2,5 4,3 3,4 2,3 1,5 2,1 4,1 6,1



1 2 3 4 5

1 а б в г д

2 е ж з и к

3 л м н о п

4 р с т у ф

5 х ц ч ш щ

6 ь ы э ю я
Листинг программы:

#include "MPrisonEncrypt.h"
MPrisonEncrypt::MPrisonEncrypt() {

alph[0][0] = 'а';

alph[0][1] = 'б';

alph[0][2] = 'в';

alph[0][3] = 'г';

alph[0][4] = 'д';

alph[1][0] = 'е';

alph[1][1] = 'ж';

alph[1][2] = 'з';

alph[1][3] = 'и';

alph[2][0] = 'к';

alph[2][1] = 'л';

alph[2][2] = 'м';

alph[2][3] = 'н';

alph[2][4] = 'о';

alph[3][0] = 'п';

alph[3][1] = 'р';

alph[3][2] = 'с';

alph[3][3] = 'т';

alph[3][4] = 'у';

alph[4][0] = 'ф';

alph[4][1] = 'х';

alph[4][2] = 'ц';

alph[4][3] = 'ч';

alph[4][4] = 'ш';

alph[5][0] = 'щ';

alph[5][1] = 'ы';

alph[5][2] = 'ь';

alph[5][3] = 'э';

alph[5][4] = 'ю';

alph[5][4] = 'я';

}

String MPrisonEncrypt::encode(String msg) {

if (msg == "")

{

return "";

}

String result = "";

for (int i = 1; i <= msg.Length(); i++)

{

result += getIndex(msg.SubString(i,1)) + ' ';

}

return result;

}
String MPrisonEncrypt::getIndex(String find) {

for (int i = 0; i < 6; i++)

{

for (int j = 0; j < 5; j++)

{

if (find.AnsiCompareIC(alph[i][j]) == 0)

{

String ret = IntToStr(i) + "," + IntToStr(j);

return ret;

}
}

}

return "";

}
String MPrisonEncrypt::decode(String msg) {

int ind[2];

if (msg == "")

{

return "";

}
String result = "";

MParser mp(msg);

int tmp;

while ((tmp = mp.getNextNumber()) != -1)

{

ind[0] = tmp;

ind[1] = mp.getNextNumber();

result += alph[ind[0]][ind[1]];

}

return result;

}
MParser::MParser(String _data) {

data = _data;

result = "";

int i = 1;

cnt = 1;

while (i < data.Length()) {

while (!data.SubString(i,1).AnsiCompareIC(" ") || !data.SubString(i,1).AnsiCompareIC(","))

{

i++;

}

result += data.SubString(i,1);

i++;

}

}
int MParser::getNextNumber() {

if (this->cnt > result.Length())

{

return -1;

}
String res = result.SubString(cnt, 1);

this->cnt++;

return StrToIntDef(res, 0);

}

Задание

Зашифруйте следующее предложение методом аналитического преобразования.

«Помехоустойчивое кодирование – это кодирование с возможностью восстановления потерянных или ошибочно принятых данных»
Решение:



Вывод:

В ходе лабораторной работы было изучено шифрование методом «Тюремной азбуки». Был составлен программный модуль, содержащий класс, реализующий изученный метод. В завершение, был составлен отчет о проделанной работе.
Учебный текст
© perviydoc.ru
При копировании укажите ссылку.
обратиться к администрации