Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЗ к Диплому.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
681.35 Кб
Скачать

3.3. Шифрация сообщения

Перебираем символы:

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

{

Записываем очередной символ в массив:

TextByte = String[i];

Перебераем биты символов:

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

{

Next = GetPosition(First, Shag, WIDTH);

TColor COLORR = Bmp->Canvas->Pixels[First.x][First.y];

Получаем каналы:

BYTE R=GetRValue(COLORR);

BYTE G=GetGValue(COLORR);

BYTE B=GetBValue(COLORR);

Получаем записываемый бит:

int bit = GetBitValue(TextByte, j+1);

Записываем j-ый бит в канал:

R = ReadBitToByte (bit, R);

Переопределяем цвет:

Bmp->Canvas->Pixels[First.x][First.y] = RGB(R,G,B);

First = Next;

}

}

3.4. Сохранение картинки

Вывод на экран основной информации:

Form1->Label9->Caption = Shag;

Form1->Label12->Caption = TEXT_SIZE;

Открытие диалога сохранения:

SavePictureDialog1->Execute();

if (SavePictureDialog1->FileName != "")

Bmp->SaveToFile(SavePictureDialog1->FileName);

else

{

Вывод сообщения об ошибке сохранения:

MessageBox(NULL, "Изображение не сохранено...", "Ошибка!", MB_OK | MB_ICONERROR);

return;

}

Form1->Left = Stego->Left + Stego->Width/2 - Form1->Width/2;

Form1->Top = Stego->Top + Stego->Height/2 - Form1->Height/2;

Form1->ShowModal();

}

3.5. Дешифрация текста

void __fastcall TStego::Button2Click(TObject *Sender)

{

Проверка на наличие ошибок:

if (ERR_OPEN_BMP == true)

{

MessageBox(NULL, "Ошибка 001: изображение не найдено.\n", "Ошибка!", MB_OK | MB_ICONERROR);

return;

}

Open->Left = Stego->Left + Stego->Width/2 - Open->Width/2;

Open->Top = Stego->Top + Stego->Height/2 - Open->Height/2;

Open->ShowModal();

Считываем ключ:

int SHAG = StrToInt(Open->Edit1->Text);

int KOL = StrToInt(Open->Edit2->Text);

Позиция следующего кодируемого пиксела:

TPoint Next;

Позиция кодированного пиксела:

TPoint First;

Переменная для хранения символа:

BYTE TextByte;

char *result = new char[KOL+1];

strset(result, '\0');

Массив для хранения битов:

int *BitMass = new int[8];

Перебор символов дешифруемого сообщения:

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

{

Перебор битов символа:

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

{

Next = GetPosition(First, SHAG, WIDTH);

Получаем цвет:

long COLORR = GetPixel(Bmp->Canvas->Handle,First.x,First.y);

BYTE R=GetRValue(COLORR);

BitMass[j] = GetBitValue(R, 8);

First = Next;

}

result[i] = BinaryToByte (BitMass);

for (int k = 0; k < 8; k++) BitMass[k] = 0;

}

RichEdit1->Clear();

result[KOL] = '\0';

RichEdit1->Text = result;

}

3.6. Сохранение ключа шифрования

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Открытие диалога сохранения:

Stego->SaveDialog1->Execute();

Проверка правильности введенного имени файла:

if (Stego->SaveDialog1->FileName == "")

{

MessageBox(NULL, "Ключ не сохранен...", "Ошибка!", MB_OK | MB_ICONERROR);

return;

}

ofstream READ;

READ.open(Stego->SaveDialog1->FileName.c_str());

Запись шага шифрования и количества слов:

READ<<StrToInt(Label9->Caption)<<endl;

READ<<StrToInt(Label12->Caption);

Form1->Close();

}