Visual C# — szyfrowanie ….

Visual C# — szyfrowanie ….
Razem głosów: 8 co stanowi: 85% całości.

images333

Czasem chcemy by nikt nie powołany nie mógł mieć dostępu do naszych plików i takich tam … oczywiście jest wiele programów gotowych szyfrujących dane, ale przecież możemy sobie też sami napisać gdyż Visual C# daje nam narzędzia do tego celu. Tu opiszę tylko podstawowe korzystanie z metod kryptograficznych w C# może bez polotu, ale mam nadzieję, że natchnie to wielu do działania ….

No dobrze …..

Tematyka szyfrowania tekstów i wiadomości jest znana nie od dziś, od prostych szyfrów po wyrafinowane maszyny szyfrujące jak np. ENIGMA …

Russland, Verschlüsselungsgerät Enigma

Niemniej trzeba mieć na uwadze, że każdy szyfr wcześniej czy później zostanie rozgryziony tak więc niema szyfrów doskonałych …..  Nasz też nie jest doskonały ba wręcz całkowicie banalny, prostacki i ……….  a sami zobaczycie :P

W naszym .Net  C# mamy do dyspozycji metody kryptograficzne , których zadanie to szyfrowanie i odszyfrowywanie np. pliku tekstowego. Co ciekawe nawet ładnie daje radę. By się przekonać jak prosto i wygodnie można korzystać z szyfrowania w naszej aplikacji stworzymy sobie dwie proste metody  zaszyfrujPlik()  i odszyfrujPlik() w których wywołamy metodę CryptFile.  Tak to naprawdę proste ….

Jak widzicie jest to całkowicie proste i banalne. W zasadzie wszystko za nas robi metoda CryptStream, która zajmuje się szyfrowaniem strumieni z pliku wejściowego i zapisaniem wyniku do strumienia wyjściowego. Ciało metody CryptStream  prezentuje się następująco:

Jak widzicie to taki dość banalny sposób kodowania pliku korzystający z mało wyrafinowanej metody szyfrowania AES.  Funkcję TwKlucz_wektor wypadało by opisać ale tak pokrótce. Tworzy ona klucz i wektor inicjacji, posiada też „tajną broń” czyli zawartość tablicy kod, która stanowi zbiór pseudolosowych wartości. Służą one do utrudnienia złamania kodu stosując np  metodę  słownikową. Tu warto wybrać własne wartości.  Nasz kod też posiada mechanizm kodująco/dekodujący który jest banalny, i sam decyduje czy należy zakodować czy odkodować dane zawarte w pliku.

Reszta kodu jest dosyć zagmatwana ale oczywista. Wykonuje szyfrowanie lub odszyfrowanie pliku i zapisuje dane do strumienia. Czyli nic zagadkowego i skomplikowanego.  Tymczasem tak się prezentuje ciało naszej funkcji TwKlucz_wektor:

Jak widać tworzymy tu nowy obiekt Rfc2898 i przekazujemy jego konstruktorowi hasło, kod oraz liczbę iteracji. Obiekt nasz ma za zadanie sprawić by wynik był „bardziej” losowy poprzez wykonanie wskazanej liczby iteracji u nas 1500. W tym przypadku jak widać tak naprawdę zastosowaliśmy pseudo-generator liczb losowych bazujący na algorytmie HM ACSHA1.

Kod działa , ale nie jest doskonały. Przechowując hasło wewnątrz programu można łatwo je podejrzeć w kodzie C#, a co za tym idzie szybko odszyfrować co chcieliśmy utajnić. Dużo lepiej by było stworzyć funkcję wprowadzania hasła przed dekodowaniem pliku. Ponadto musimy się upewnić, że nasze hasło po wprowadzeniu rozszyfrowuje plik, a jego nie podanie generuje stek bzdur i bezsensowny bełkot.

Oczywiście możemy rozszerzyć naszą małą zabawę. Metody kryptograficzne z .Net dobrze sobie radzą ze strumieniami czy tablicami co widać w naszym kodzie , ale nie radzą sobie ze stringami wcale :( Na szczęście można sobie ułatwić pracę z tekstem poprzez przekształcenie stringu do wartości HEX i po zaszyfrowaniu ciągu wyswietlić jego reprezentacje również szesnastkowo . Ale o tym innym razem …

Tymczasem pobawcie się w szyfrowanie :)

 

Podziel się na:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay