9. Jak zaszyfrować hasło?

Zdarza się, że pewne dane w naszej bazie (np. hasła użytkowników w naszym własnym systemie logowania) muszą być szczególnie chronione. Często wystarcza najprostsze szyfrowanie, poniżej podaję jak je zrealizować. Nie myślcie jednak, że skoro nasz szyfr jest prosty, to jest również łatwy do złamania dla ciekawskich. Podobną metodę zastosowano w Accessie 97 do zaszyfrowania hasła bazy danych.

Public Function sz(haslo)
Dim i As Integer, w As String
Const s = "Litwo, Ojczyzno moja, Ty jesteś jak zdrowie"
's - to nasz tajny klucz
    For i = 1 To Len(haslo)
        w = w & Chr(Asc(Mid(haslo, i, 1)) Xor Asc(Mid(s, i, 1)))
    Next i
    sz = w
End Function

'------ Poprawka Pawła Durysa
'       w = w & Chr(Asc(Mid(haslo, i, 1)) Xor Asc(Mid(s, i, 1)))
'linia powyzej nie pozwala na zakodowanie hasla dluzszego niz nasz klucz
'linia ponizej rozwiazuje ten problem
'       w = w & Chr(Asc(Mid(haslo, i, 1)) Xor Asc(Mid(s, (i Mod (Len(s) - 1)) + 1, 1)))
'------ Koniec poprawki

Przykładowo, wywołanie sz("yXF&V") zwraca "512Q9"

Jednak zaszyfrowanie informacji, to dopiero połowa zadania - trzeba je jeszcze odszyfrować. Prezentowana funkcja sama potrafi się dekodować, oto ilustracja tej zasady:

sz("yXF&V") zwraca "512Q9" 
sz("512Q9") zwraca "yXF&V" 
sz(sz("512Q9")) zwraca "512Q9"

Uwaga: Nie zawsze zdekodowany ciąg daje się wyświetlić na ekranie, ponieważ może on zawierać dowolne znaki ASCI, także te, które nie mają swojej reprezentacji wizualnej. Przykładem takiego znaku jest chr(1) lub chr(8), np:

sz("MaCOV") zwraca "789", czyli ciąg: chr(1) & chr(8) & "789"

Jednak brak odpowiedniej czcionki dla znaku, nie przeszkadza w prawidłowym odkodowaniu hasła. Łańcuch "789" jest prawidłowo dekodowany przez funkcję na pierwotną postać "MaCOV".

K. P.