Ł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łyr 1 nr 16 138669446416 narrator16 MISJAFakty nieznane , bo niebyłe Nasz Dziennik, 2011 03 16990904 1616 (27)więcej podobnych podstron