Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра електронних обчислювальних машин

Інформація про роботу

Рік:
2005
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Захист інформації в комп’ютерних системах
Група:
КІ-44

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра електронних обчислювальних машин Звіт про виконання лабораторної роботи № 3 з курсу „ Захист інформації в комп’ютерних системах ” Львів – 2005 Мета роботи: Створити програму, яка б загодовувала текст з файлу у BMP-файл без помітних змін у зображенні та потім при могла відновити закодований текст із BMP-файлу. Виконання роботи: У BMP-файлі із глибиною кольору 24 біт кожен піксель описується трьома байтами, що відповідають за червону, зелену та синю складові відповідно. Для того щоб закодувати символи тексту у такий BMP-файл використовуються молодші біти кожного байту. Їх зміна дуже незначно впливає на зміну кольору – зміна молодшого біта в одному байті змінює відтінок відповідного кольору у пікселі всього на , що при перегляді помітити практично неможливо. Для того, щоб при відтворенні тексту із BMP-файлу була відома довжина зашифрованого тексту, перед записом власне тексту у BMP-файл, я записую у BMP-файл двобайтове число у якому збережено довжину вхідного тексту у байтах. Текст програми: #include "stdafx.h" #include "stdlib.h" #include "io.h" #include "math.h" FILE * pic, * txt, * out; void error(); void encrypt(char*,char*,char*); // text into bmp void decrypt(char*,char*,char*); // text from bmp int main(int argc, char* argv[]) { char mode; if (argc!=4) error(); mode=argv[1][0]; if ( mode=='e') encrypt(argv[1],argv[2],argv[3]); else if ( mode=='d') decrypt(argv[1],argv[2],argv[3]); else { error(); return 1; } puts("\nDONE!"); fclose(pic); fclose(out); return 0; } void encrypt(char* a1,char* a2,char* a3) //into bmp { int i=0, count=0; unsigned int ch, buf; int text=open(a3,1,1); unsigned int textlength=filelength(text); // calculate text file length close(text); if ( ((pic = fopen(a2,"rb")) != NULL) && ((txt = fopen(a3,"rb")) != NULL) && ((out = fopen("mix.bmp","wb")) != NULL) ) printf("Files've been successfully open!\n"); else { printf("Files can't be open!\n"); exit(1); }; printf(" mode: %s = ENCRYPTING;\n input image file: %s;\n",a1,a2); printf(" input text file: %s;\n output (mixed) image file: mix.bmp.\n",a3); for (i=0;i<55;i++) fputc(fgetc(pic), out); // ------------ copy BMP header --- // ------------------------------------------- save text length to BMP file --- for(i=0;i<=15;i++){ // text length is stored with 16 bits fread(&buf,1,1,pic); // read byte from BMP if ((textlength&(int)pow(2,i))==0) // if bit #i of current byte = 0 buf = buf & 0xFFFE; // set youngest bit of BMP byte to 0 else buf = buf | 0x0001; // else - to 1 fwrite(&buf,1,1,out); // write 'mixed' byte to BMP } while(!feof(txt)) { // -------------------------------- encode the text --- ch = fgetc(txt); // read byte from text for(i=0;i<=7;i++){ // cycle within text byte fread(&buf,1,1,pic); // read byte from BMP if ( (ch&(int)pow(2,i)) == 0 ) // if bit #i from text byte = 0 buf = buf & 0xFE; // set youngest bit of BMP byte to 0 else buf = buf | 0x01; // else - to 1 fwrite(&buf,1,1,out); // write 'mixed' byte to BMP } } fread(&buf,1,1,pic); // ---------------------------------- copy the rest --- while(!feof(pic)) { fwrite(&buf,1,1,out); fread(&buf,1,1,pic); } fclose(txt); } void decrypt(char* a1,char* a2,char* a3) //from bmp { int i=0, count=0; unsigned int ch, buf, textlength, l=0; if ( ((pic = fopen(a2,"rb")) != NULL) && ((out = fopen(a3,"wb")) != NULL) ) printf("Files've been successfully open!\n"); else { printf("Files can't be open!\n"); exit(1); }; printf(" mode: %s = DECRYPTING;\n input (mixed) image file: %s;\n",a1,a2); printf(" output text file: %s.\n",a3); for (i=0;i<55;i++) fgetc(pic); // ------------------------ skip BMP header --- textlength=0; // ---------------------------------------- get text length --- for(i=0;i<=15;i++){ // text length is stored with 16 bits fread(&buf,1,1,pic); // read byte from BMP if ( buf & 0x0001 == 1 ) // if the youngest bit of BMP byte = 1 textlength = textlength | (int)pow(2,i); // put 1 into bit #i of text byte } for (l=0;l<textlength;l++) { // -------------- extract the text from BMP --- ch = 0; for(i=0;i<=7;i++){ // cycle within text byte fread(&buf,1,1,pic); // read byte from BMP if ( buf & 0x01 == 1 ) // if the youngest bit of BMP byte = 1 ch = ch | (int)pow(2,i); // put 1 into bit #i of text byte else ch = ch & ~(int)pow(2,i); // else - put 0 } fwrite(&ch,1,1,out); // write 'extracted' byte to text file } } void error() { printf("Wrong parameters!\nSYNTAX: txt_into_bmp e|d <input file> <output file> \n"); getchar(); exit(1); } Висновок: виконуючи цю лабораторну роботу, я ознайомився із внутрішньою структурою растрових зображень формату BMP, вивчив та реалізував метод «невидимого зберігання» тексту у BMP-файлі.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!