Analiza kodu

Program składa się z 3 głównych metod, odpowiedzialnych za otwieranie plików graficznych oraz tekstowych, zamykanie programu, a także ukrywanie oraz odkrywanie wiadomości. Dodatkowo metody odpowiedzialne za ukrywanie oraz odkrywanie wiadomości składają się z kilku mniejszych metod, które są niezbędne do ich prawidłowego funkcjonowania.

 

Ukrywanie wiadomości

Metoda ta odpowiedzialna jest za ukrycie wiadomości w pliku graficznym. Na początku następuje odczytanie wiadomości z pola tekstowego programu, a następnie zamiana wiadomości na bajty. Jeśli w polu tekstowym nie została wpisana żadna wiadomość, wyrzucany jest wyjątek o treści „Wpisz wiadomość do ukrycia.”. Kolejnym elementem jest odwołanie do metody get_msg(), która zwraca tablicę addon z długością ukrywanej wiadomości oraz samą wiadomością w postaci bitowej. Metoda ta zostanie bardziej szczegółowo opisana w dalszej części. Jeśli ilość bitów potrzebna do zapisania wiadomości jest większa niż wybrany do jej ukrycia plik graficzny, wyrzucony zostaje wyjątek informujący o tym fakcie. Jeśli wybrany obraz jest w stanie pomieścić wiadomość następuje wywołanie metody encode_image(), która odpowiedzialna jest za ukrycie w pliku graficznym wpisanej wiadomości. Metoda ta zostanie przedstawiona w dalszej części strony. Następnie następuje zapisanie obrazu z ukrytą wiadomością do pliku .png. Jeżeli wystąpi problem z zapisem pliku lub nie wybrano obrazu, w którym ukryta ma zostać wiadomość wyświetlony zostanie komunikat o błędzie.

 

Metoda get_msg()

Metoda ta na wejściu otrzymuje tablicę z zapisaną w postaci bajtów wiadomością. Następnie stworzona zostaje stworzona tablica addon, w której pierwsze 33 bity zarezerwowane zostały do zapisania długości wiadomości, natomiast w kolejnych bitach zapisana zostaje wiadomość w postaci bitowej. Otrzymana w ten sposób tablica addon zostaje zwrócona jako efekt metody.

 

Metoda encode_image()

Metoda ta na wejściu otrzymuje tablicę addon, w której zapisana jest wiadomość w postaci binarnej. Następnie następuje sczytanie wartości RGB poszczególnych pikseli i rozbicie piksela na pojedyncze składowe red, green, blue. Najmniej znaczący bit każdej składowej zamieniany jest na kolejny z kolei bit ukrywanej wiadomości, po czym ustawiana jest nowa wartość RGB danego piksela. Proces ten powtarzany jest do momentu, gdy ukryta zostanie cała wiadomość.

 

Odkrywanie wiadomości

Metoda ta odpowiedzialna jest za odczytanie ukrytej w obrazie wiadomości. Na początku następuje zadeklarowanie tablicy liczb całkowitych msg, w której znajdą się wartości zwrócone przez metodę decode_image(), a także ciągu znaków finalText, w którym zapisana zostanie finalna wersja odczytanej wiadomości. Metoda decode_image() jest odpowiedzialna za odczytanie z obrazu ukrytej w nim wiadomości w postaci bitowej i przedstawiona zostanie bardziej szczegółowo w dalszej części strony. Następnie zadeklarowana zostaje tablica o nazwie text. Następnie w pętli każdemu elementowi tablicy text przypisanych zostaje kolejnych 8 bitów odczytanej wiadomości. Każdy 8 bitowy element zamieniany jest na postać dziesiętną, a następnie konwertowany do odpowiadającemu danej liczbie całkowitej znakowi i dodawany do finalText. Otrzymany w ten sposób tekst wyświetlany jest w polu tekstowym programu. W przypadku, gdy w wybranym pliku graficznym nie została ukryta żadna wiadomość lub użytkownik nie wybrał pliku, z którego ma zostać odczytana wiadomość zostanie wyświetlony odpowiedni komunikat.

 

Metoda decode_image()

Metoda ta odpowiedzialna jest za odczytanie z pliku graficznego ukrytej w nim wiadomości. W pierwszej części metody następuje sczytanie wartości RGB kolejnych pikseli i odczytanie z ich składowych red, green, blue najmniej znaczących bitów. Pętla ta jest wykonywana do momentu sczytania pierwszych 32 bitów, które informują o długości ukrytej w obrazie wiadomości. Następnie odczytana długość wiadomości wykorzystywana jest do określenia rozmiaru nowo stworzonej tablicy nazwie result, w której zapisana zostanie postać bitowa wiadomości. Ostatnia część metody sczytuje wartości RGB kolejnych pikseli i zapisuje najmniej znaczące bity jako kolejne elementy tablicy result. Jako wynik metody zwracana jest tablica result z odczytaną z pliku wiadomością.

Dodaj komentarz