Strony

poniedziałek, 13 sierpnia 2018

XOR File Encode/Decode [Python3,C++]

Witam was.
Dziś pragnę zaprezentować moją aplikację wykonaną na potrzeby zaliczenia jednego z przedmiotów na studiach. Aplikacja szyfruje wskazany plik za pomocą operacji XOR (alternatywa wykluczająca). Dla uproszczenia w mojej aplikacji klucz szyfrujący może mieć wartość od 0 do 255 włącznie. Zarówno szyfrowanie i deszyfrowanie wykonywane jest za pomocą tej samej funkcji z tym samym kluczem. Inaczej mówiąc wystarczy dwa razy przepuścić dany plik przez aplikacje wpisując ten sam klucz a otrzymamy to samo. Pojedyncze uruchomienie aplikacji na danym pliku, zaszyfruje ten plik  zaś później uruchomienie tej samej aplikacji na uprzednio zaszyfrowanym pliku i wprowadzenie dokładnie tego samego klucza spowoduje jego odszyfrowanie.

szyfrownaie, dll, xor, szzyfr strumieniowy


Python lubi C++

Szyfrowanie zostało zaimplementowane w C++. Następnie kod został skompilowany jako biblioteka DLL. Taką bibliotekę z powodzeniem można używać w oprogramoaniu pisanym w Pythonie. Dodatkowo w samym pythonie jest implementacja tej samej funkcji szyfrującej. Dublowałem te funkcje by porównać czas szyfrowania.

C++ nokautuje Pythona

Poniższy screen nie pozostawia suchej nitki na Pythonie.


python przegrywa w porwnaniu z C++


Jak widzimy szyfrowanie zaimplementowane w C++ jest prawie 3 razy szybsze od tego w pythonie. Nie jest to przypadek. Python nie jest aż tak wydajnym językiem. Sekret "wydajności" pythona polega na tym, że język ten można bardzo łatwo łączyć z różnymi bibliotekami. Konwencja jest taka że te bardzo krytyczne algorytmy są pisane np w C czy C++ i jest wystawiany wrapper do pythona by z poziomu tego języka można było w bardzo prosty sposób używać tych bibliotek.

GUI w Pythonie


Reasumując sam algorytm szyfrowania został wykonany w C++ zaś Python to głównie GUI stworzone z wykorzystaniem biblioteki Tkinter. Do tego celu python nadaje się wyśmienicie.

Podsumowanie


Aplikacja powstała wyłącznie w celach edukacyjnych. Sposób szyfrowania, oraz liczne uproszczenia w implementacji powodują, że aplikacja ta nie nadaje się do szyfrowania naprawdę ważnych i poufnych danych. Nie zalecam nikomu szyfrować nią jakiś poufnych danych.
Czynnikiem motywującym mnie do napisania tej aplikacji był fakt połączenia moich dwóch ulubionych języków w jeden finalny program.
Kod całej aplikacji dostępny jest tutaj.

Brak komentarzy:

Prześlij komentarz