Program zaawansowane logowanie do aplikacji
W internecie mnóstwo jest żenujących "kodów do logowania się" ujawniających bezpośrednio w kodzie w formie tekstowej loginy i hasła. Zrozumiałbym jeszcze same loginy, ale hasła to już przegięcie. Tym bardziej, że Visual Basic .Net nie kompiluje programu bezpośrednio do kodu maszynowego procesora, który jest trudniej odtworzyć, a do kodu pośredniego, który byle jakim programem można zdekompilować i odczytać loginy i co najgorsza hasła do kont użytkowników.
Nasz program będzie korzystał z algorytmu szyfrującego SHA1, dzięki temu nasze hasła będą zabezpieczone.
Na początku tworzymy dwie formy, na formie pierwszej umieszczamy 2 TextBox'y i 1 Button. Co prawda Visual Studio oferuje nam już gotową LoginForm (Project/Add Item/LoginForm) jednak szybciej zrobimy nową, taką jak się nam podoba, niż zmodyfikujemy gotową.
Kod starałem się wystarczająco skomentować, żeby był jak najbardziej zrozumiały. Piszemy więc kod:
Imports System.Text Imports System.Security.Cryptography Public Class Form1 Private Function SHA1(ByVal PobraneHaslo As String) As String Dim ASCIIEncoder As New ASCIIEncoding ' deklaracja obiektu enkodera Dim LancuchZwrotu As String = Nothing ' deklaracja zmiennej typu string Dim ZnakASCII() As Byte = ASCIIEncoder.GetBytes(PobraneHaslo) 'deklaracja tablicy znakASCII pobierającej znaki z enkodera Dim koder As New SHA1CryptoServiceProvider ' deklarujemy nowy obiekt szyfrujący SHA1 Dim ZakodowanyZnak() As Byte = koder.ComputeHash(ZnakASCII) ' delaracja tablicy zaszyfrowanych znakow pobierającą z obiektu szyfrującego For Each i As Byte In ZakodowanyZnak ' pętla na tablicy zaszyfrowanych znakow LancuchZwrotu &= i.ToString("x") 'łańcuchzwrotu otrzymuje kolejno zaszyfrowane znaki skonwertowane konwerterem hexadecymalnym ("x") Next Return LancuchZwrotu 'funkcja zwraca zmienną łańcuchzwrotu End Function Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim ZakodowaneHaslo As String = SHA1(TxbPass.Text) ' deklaracja zmiennej, która wysyła nasze hasło do funkcji kodującej 'Instrukcja warunkowa jeśli TxbUser zawiera nazwę użytkownika "Heniek" oraz jeśli zwrot z funkcji szyfrującej 'będzie się zawierał we wcześniej sprawdzonym zakodowanym ciągu znaków to wtedy można otworzyć formę 2 If TxbUser.Text.Contains("Heniek") And ZakodowaneHaslo.Contains("2c224f4a2bd72cf328ac4882ec3bfb7fbbc62231") Then ' zakodowane hasło "sobota" Form2.Show() Else MessageBox.Show("Błędny login lub hasło", "Odmowa dostępu", MessageBoxButtons.OK, MessageBoxIcon.Stop) End If End Sub End Class
Jak widać z kodu można podejrzeć jedynie jaki jest login, hasła jednak odczytać nie można (oczywiście pomijając to, że podałem je w komentarzu żeby można było sprawdzić działanie programu).
Miłej zabawy i zapraszam wkrótce do następnego poradnika
Utworzono 17.09.2015
Witam serdecznie! zrobilem tak jak jest opisany i pokazuje mi dwa bledy
OdpowiedzUsuńSeverity Code Description Project File Line Suppression State
Error BC30451 'TxbPass' is not declared. It may be inaccessible due to its protection level.
i
Severity Code Description Project File Line Suppression State
Error BC30451 'TxbUser' is not declared. It may be inaccessible due to its protection level.
Jaka moze byc tego przyczyna???
Dziekuje
Z treści błędu wynika, że twoje tekstboxy nie nazywają się tak samo jak odniesienia do nich w kodzie programu.
UsuńProperties:
OdpowiedzUsuńname TextBox1 zmień na TxbUse,
oraz
name TextBox2 zmień na TxbPass
Musi działać, u mnie wszystko działa.
Bardzo dobry poradnik :)
Pozdrawiam
andrew
Dziękuje bardzo mi miło :)
Usuń