art1 (16)













Łatwe szyfrowanie

Na łamach VBM (3 numer) opisano jak szyfrować pliki, tak aby przeciętny użytkownik
komputera nie mógł ich odczytać. Przypomnę sposób opisany w artykule o szyfrowaniu
plików:

.............................................................................

{"(...)18) Jeśli piszesz jakiś program, to koduj pliki.
Chyba nie chcesz, aby jakiś dowcipniś pozmieniał tekty w plikach DAT ??? Możesz
kodować np. tą metodą :

For a=1 to len(z)
x=(asc(left(z,a)))+1
if x=256 then x=0
y=y+chr(x)
Next a

Dzięki temu zakodowaliśmy string Z. Litera A to B B to C itd.
String Y to zakodowany tą metodą string Z. A ten kod odkodowywuje :

For a=1 to len(z)
x=(asc(left(z,a)))-1
if x=-1 then x=255
y=y+chr(x)
Next a(...)"}

............................................................................

Tak samo jak autor uważam że, szyfrując pliki tą metodą. można nieźle utrudnić
odczytanie i ewentualną modyfikację plików przez innych użytkowników  co jest
efektem zamierzonym szczególnie w większych aplikacjach.

Niestety samemu też skomplikujemy sobie życie jeżeli będziemy chcieć poprawić
swój program po upływie pewnego czasu. Zapominamy jaka część kodu jest odpowiedzialna
za szyfrowanie, i do czego ona służy, a zwłaszcza kiedy nie stosujemy opisu
poszczególnych poleceń. Wyobraź sobie teraz kilka takich metod (nie tylko
szyfrujących) w jednym SUB'e. Przez tydzień (czasami dłużej) pamięta się co jest do
czego, ale po dłuższym okresie czasu zapomina się, a jeżeli podobnych funkcji będzie
kilka i chciał(a)byś po jakimś czasie poprawić program to wtedy można mieć kłopoty
z rozszyfrowaniem własnego programu.

Ja bym proponował napisanie gdzieś w module (można też w zwykłym kodzie, ale ja
wolę mieć wszystko w jednym miejscu) funkcji o nazwie np. Koduj (nazwa funkcji jest
najważniejsza, bo nazywając funkcję np. "aaa" nikt nie będzie wiedział do
czego ona służy) np.:

Function Koduj(Tekst As String,
szyfr As Byte) As String
Dim I As Byte 'deklaruje
zmienne
Dim Bajt As String
Dim Tekst2 As String
For I = 1 To Len(Tekst) 'pętla będzie wykonywana tyle razy ile jest znaków w zmiennej tekst
'bajt = zamień na kod ASCII znak( wytnij 1 znak ze zmiennej tekst którego miejsce
wskazuje zmienna i) dodaj do niego wartość szyfru
Bajt = (Asc(Mid(Tekst, I, 1))) + szyfr
If Bajt >= 256 Then Bajt = Bajt -
256 'sprawdza czy kod zaszyfrowanego bajta jest równy lub większy
niż 256 w tedy odejmuje od niego wartość 256
Tekst2 = Tekst2 & Chr(Bajt) 'zapamiętuje kolejny
zaszyfrowany bajt
ext I 'koniec pętli
Koduj = Tekst2 'zwraca zmiennej Koduj zaszyfrowany tekst
End Function 'koniec funkcji

teraz w normalnym kodzie piszemy przy kodowaniu pliku"

ZmiennaZaszyfrowana = Koduj2(zmiennnaNieZaszyfrowana,
NumerSzyfru)

Rozszyfrowanie ZmiennaZaszyfrowana nie jest trudne wystarczy napisać:

ZmiennaNieZaszyfrowana = Koduj(ZmiennaZaszyfrowana, 256 -
NumerSzyfru)

spytacie pewnie po co napisałem funkcję kodującą według zmiennej NumerSzyfru? Daje
to programiście (czyli Wam) większą swobodę w szyfrowaniu plików. Na przykład
pisząc program szyfrujący pliki można dać użytkownikowi możliwość wyboru szyfru i
tak samo przy rozszyfrowaniu użytkownik naszego programu po podaniu złego numeru szyfru
zobaczy na ekranie monitora wyświetlone nie zrozumiałe dla niego słowa (piszę o
programie np. notatnik z opcją szyfrowania tekstu). Opiszę jeszcze jedną funkcję
szyfrującą zmienne oto jej treść:

Function Koduj(Tekst As String) As String 'funkcja
kodująca znaki (potrafi się sama rozkodować)
Dim Tekst2 As String
Dim i As String 'deklaruje
zmienną
For i = 1 To Len(Tekst) 'powtarza pętlę tyle razy ile znaków ma nasz parametr Tekst
Tekst2 = Tekst2 & Chr(256 - Asc(Mid(Tekst, i, 1))) 'koduje znak po
znaku odwracając jego kod
Next i 'koniec pętli
Koduj = Tekst2 'zwraca zakodowaną wartość
End Function

Ta funkcja podoba mi się najbardziej, ponieważ sama się rozszyfrowuje i nie trzeba
się męczyć z numerem szyfru wystarczy napisać tak jak poniżej, aby zaszyfrować
zmienną :

ZmiennaZaszyfrowana = koduj2(ZmiennaNieZaszyfrowana)

by odszyfrować :

ZmiennaNieZaszyfrowana = koduj2(ZmiennaZaszyfrowana)

Życzę miłej zabawy z szyfrowaniem w razie pytań napisz

Andrzej Wodyński
http://strony.wp.pl/wp/vb_i_ja/






Wyszukiwarka

Podobne podstrony:
Scenariusz 16 Rowerem do szkoły
r 1 nr 16 1386694464
16 narrator
16 MISJA
Fakty nieznane , bo niebyłe Nasz Dziennik, 2011 03 16
990904 16
16 (27)

więcej podobnych podstron