Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB6: Salasanasysteemi

kayttaja-4976 [15.07.2006 14:11:05]

#

Minua on kiinnostanut (toimivat?) salasanasysteemit jo pienestä pitäen, mutta silti olen saanut aikaan vain epämääräisiä söhellyksiä jotka eivät toimi. (Tämä siis toimii)

Tämä salasanasysteemi on toteutettu pitkälti DLL:än avulla, kiitokset Blazelle hyvästä DLL oppaasta.


Sen pidemmittä puheitta koodin valmisteluihin.

Kääntyy ainakin VB6 Enterprise Editionilla.

Blazen DLL Oppaasta kannattaa katsoa alku miten tehdään DLL Projekti.
Luokkamoduulin (Class Module) nimi saisi olla Class1.
Lisäksi tarvitaan normaali moduuli.

Sitten avataan uusi VB ja tehdään sinne Standard EXE-projekti.
Sinne kaksi tekstikenttää (txtUsername ja txtPassword). Toiseen tulee käyttäjätunnus, toiseen salasana
Lisää vielä painike (Button1) jota painamalla tarkistetaan käyttäjätunnuksen oikeellisuus.

Lisäksi copypastea Data.datin sisältö kryptattuna C:n juureen

DLL:n moduuliin

   Public Tunnukset() As Variant


*** DLL:n luokkamoduuliin


Public Status As Boolean
Public Process As Boolean

Public Sub Authentification(ArgUsername As String, ArgPassword As String)
    'Määritellään prosessi käyntiin
    'ja ilmoitetaan ettei salasana
    'ole (toistaiseksi) oikein
    Process = True
    Status = False

    Dim KohdeKansio As String
    Dim KohdeKansio2 As String
    'Varsinainen salasanatiedosto on data.dat
    'Kryptaamme salasanan auki tiedostoon passutAuki.dat-iin
    KohdeKansio = "C:\data.dat"
    KohdeKansio2 = "C:\passutAuki.dat"

Open KohdeKansio For Input As #1

decrypt$ = ""   'Avattu merkkijono
code = 123      'Koodi
    Do Until EOF(1)
        Input #1, Number&   'Luetaan salattuja numeroita
        e$ = Chr$(Number& Xor code) 'konvertoidaan Xorilla
        decrypt$ = decrypt$ & e$    'ja rakennetaan merkkijono.
    Loop

    Open KohdeKansio2 For Binary As #2
        Put #2, , decrypt$  'Laitetaan aukikryptattu merkkijono
    Close #2                'sille kuuluvaan paikkaan
Close #1
Open KohdeKansio2 For Input As #1   'Luetaan kyseistä tiedostoa

    'Tiedoston rakenne riveittäin:
    'Montako alkiota, numero
    'Tyhjä
    'ID
    'Käyttäjätunnus
    'Salasana
    'Milloin vaihdettu
    'Tyhjä jne.


    Line Input #1, Alkiot 'Montako alkiota tarvitaan
    Alkiot = Val(Alkiot)
    ReDim Tunnukset(Alkiot, 4)

    Line Input #1, Rivi 'Tyhjä rivi

    Rivi = ""

    Dim Password As String
    For i = 1 To Alkiot
        Line Input #1, id       'Järjestysnumero
        Line Input #1, Username 'Käyttäjätunnus
        Line Input #1, Password 'Salasana
        Line Input #1, Changed  'Milloin salasana viimeksi vaihdettiin
        Line Input #1, Rivi     'Tyhjä

        Tunnukset(i, 0) = id
        Tunnukset(i, 1) = Username
        Tunnukset(i, 2) = Password
        Tunnukset(i, 3) = Changed

        id = ""
        Username = ""
        Password = ""
        Changed = ""
    Next i

    Dim Changed1 As Integer     'Milloin salasana on viimeksi
    Dim Changed2 As Integer     'vaihdettu?
    Dim Changed3 As Integer     'Vuosi, Kuukausi, Päivä,
    Dim Changed4 As Date        'ja päiviä

    For i = 1 To Alkiot
        id = Tunnukset(i, 0)
        Username = Tunnukset(i, 1)        'Jaetaaan
        Password = Tunnukset(i, 2)        'muuttujat
        Changed = Tunnukset(i, 3)         'taulukkoon
        Changed1 = Mid(Tunnukset(i, 3), 1, 4)
        Changed2 = Mid(Tunnukset(i, 3), 5, 2)
        Changed3 = Mid(Tunnukset(i, 3), 7, 2)
        Changed4 = DateSerial(Changed1, Changed2, Changed3)

        If ArgUsername = Username And ArgPassword = Password Then

                Close #1            'Suljetaan tiedosto
                Kill KohdeKansio2   'Tapetaan se
                Process = False     'Ilmaistaan prosessin loppuminen
                Status = True       'Kerrotaan että salasana on oikein
                Exit Sub            'Poistutaan

        End If
    Next i
    If Dir(".\pass.dat") = "pass.dat" Then Kill ("C:\pass.dat")
    kysely = MsgBox("Käyttäjää ei tunnistettu", vbCritical, "Password Authetification")
Close #1
If Dir(KohdeKansio2) = KohdeKansio2 Then Kill KohdeKansio2
Status = False
Process = False
Exit Sub
'***************************
'*     TIEDOSTOVIRHE       *
'***************************
Tiedostovirhe:
Close
MsgBox ("An unknown error " & Err.Number & vbCrLf & Err.Description)
End Sub

Standard EXEen

Private Sub Command1_Click()
    Dim Vastaus As Boolean
    Dim MunLuokka As Class1
    Set MunLuokka = New Class1

    MunLuokka.Authentification txtUsername.Text, txtPassword.Text

    Vastaus = MunLuokka.Status
    If Vastaus = True Then
        'Oikea vastaus
        MsgBox "oikein"
        Exit Sub
    ElseIf Vastaus = False Then
        MsgBox("Väärin!")
    End If

Set MunLuokka = Nothing
End Sub

Data.dat

Tiedoston sisältö kryptattuna

 73  118  113  118  113  74  118  113  58  26  9  20  118  113  16  18  8  8  26  118  113  73  75  75  77  75  77  67  118  113  118  113  73  118  113  54  18  21  21  26  118  113  16  20  18  13  14  118  113  73  75  75  77  75  78  73  72  118  113

Tiedoston sisältö normaalina

2

1
Aaro
kissa
2006068

2
Minna
koivu
20060523

Blaze [18.07.2006 23:13:08]

#

No hyvä ja hyvä opas, kiva, että siitä jotain hyötyä oli :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta