src
folder contains the source code of the program:
main.c
- processes command line arguments and calls respective functions for different modesbmp_steg.[ch]
- provides functions for encoding messages into BMP files and decoding messages from BMP fileserrors.h
- defines user errorshelp.c
- contains help menu, generated withxxd -i help.txt > src/help.c
command
Да се състави програмен продукт, който да използва конзолен интерфейс за комуникация с потребителя.
Цел на програмата е да демонстрира възможността за „скриване“ на определено количество данни в изображения, минимално модифицирайки цветовите данни на входящия файл. Този метод на скриване на информация се нарича стеганография (буквално се превежда скрито писане).
При стартиране на програмата тя извежда информация за поддържаните от нея функционалности.
Програмата да приема аргументи от командния ред, позволяващи избор на отделните подфункционалности.
опция | тип | пример | |
---|---|---|---|
-o | Пълната пътека до изходната папка | Текстов низ Подава се в двойни кавички. Ако не се попълни за целева папка се приема текущата. |
-o "C:\Test folder\TestFileDir" |
-i | Пълната пътека до входния файл | Текстов низ Ако не се попълни, програмата приключва с грешка |
-i "C:\Test folder\TestFileDir.bmp" |
-e | Избира действието “encode” | Текстов низ Съобщението, което ще се криптира. При избор на тази опция, е задължително въвеждането на низ с повече от 1 символ. |
-e "Lorem Ipsum" |
-d | Избира действието “decode” | Текстов низ Име на изходен файл. Неговият тип е „.txt” |
-d "SecretMessage" |
За изпълнение на тази команда е нужно да изпълните следните 3 действия:
Първо трябва да прочете входния файл (изберете най-удобния за вас формат (.bmp, .jpeg ,.png или който и да е) ). Ще откриете, че различните формати имат различни шаблони за представяне на цветовите данни. Проучете как точно изглежда “header” секцията за избрания от вас формат и я изчетете в подходяща структура данни. Избирайте правилно, понеже някои формати имат подводни камъни, които могат доста да усложнят работата ви с тях
Второ – преминете към кодиране на дадената информация по метода в LSB (най-младшият бит на цветовите данни). Това е предпочитаният от нас метод понеже е най-прост за имплементация и дава най-малка визуална разлика (защо?). Ако желаете може да опитате и с различен, стига да може да обясните действието му. При енкодването на информацията помислете как декодиращата част на програмата ще различи непроменените от нас цветови данни от кодираната информация (маркер за начало и край).
Накрая запазете резултатния файл спрямо зададените параметри от потребителя със същото име и формат в зададената директория. Уверете се, че променените от вас изображения продължават да се отварят като такива.
При използване на тази команда, целта е да извършите обратното действие на “encode”. Отново прочетете файла (този път този, съдържащ промените). Извадете кодираните данни и запазете резултата спрямо желанието на потребителя.
Георги Георгиев - автор на идеята, оценяващ
Йоан Джелекарски - студент, реализиращ проекта