17 Vb.Net program zaawansowane logowanie do aplikacji

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ą.

Strzałką zaznaczyłem ważną rzecz. Właściwość TextBoxa PasswordChar należy ustawić na jakiś znak w zastępstwie (np *), w przeciwnym razie każdy zaglądający nam przez ramię będzie mógł przeczytać nasze hasło podczas wprowadzania go do programu.
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

4 komentarze:

  1. Witam serdecznie! zrobilem tak jak jest opisany i pokazuje mi dwa bledy
    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

    OdpowiedzUsuń
    Odpowiedzi
    1. Z treści błędu wynika, że twoje tekstboxy nie nazywają się tak samo jak odniesienia do nich w kodzie programu.

      Usuń
  2. Properties:
    name TextBox1 zmień na TxbUse,
    oraz
    name TextBox2 zmień na TxbPass

    Musi działać, u mnie wszystko działa.
    Bardzo dobry poradnik :)

    Pozdrawiam
    andrew

    OdpowiedzUsuń