Rekurze (generace hesla)   zodpovězená otázka

VB.NET

Zdravím, přiznám se, že ve VB.NET netuším jak docílit rekurze. V Pascalu jsem na tom "vydrcen" ze školy, ale VB.NET si dělá co chce.

Potřeboval bych si zadat do textového pole maximální délku textu a do této délky bych potřeboval nakombinovat všechny kombinace čísel/písmen... (víceméně jedná se o postupnou generaci hesla)

PSko: Pokud by se někdo ptal proč, potřebuju se dostat na vlastní FTP server a problém je v tom, že je několik let starý, starý maily zrušený (takže heslo nejde poslat mailem), heslo nenalezeno nikde na disku a podpora žádná (free server)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Rekurze je ve VB.NET naprosto stejná jako v Pascalu, nevím, proč vám to blbne. Může to vypadat třeba takto:

Dim znaky As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
Dim delka As Integer = 6

Private Sub GenerujHeslo(ByVal jizMame As String)
    If jizMame.Length < delka Then
        ' nekompletní heslo, přidat každý z přípustných znaků a pokračovat v generování
        For i As Integer = 0 To znaky.Length - 1
            GenerujHeslo(jizMame & znaky(i))
        Next

    Else
        ' kompletní heslo, vyzkoušet ho
        TestPassword(jizMame)
    End If
End Sub

Ale pozor, počet možností může být opravdu veliký a provozovateli toho FTP serveru se to nemusí líbit, buďte opatrný.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Juj, to jsem vážně magor, já na to šel oblígádně přes Chr(číslo), podmínku Case of (zda je rozsah větší než 65 => písmeno, pod 65 číslo apod.) a závěrem hlídat délku v cyklu for... De to vážně lehce. Díky moc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Směl bych mít ještě dva dotazy?

a) TestPassword(jizMame) -> to je již nová událost? Přepsal jsem ji na to, že pokud mám heslo zjištěno, ulož mi ji do globální proměnné.

b) Jak mám tuto událost zasadit do události po klinutí na tlačítko (cmdGenerovat_Click(....) Handles cmdGenerovat.Click)? Pokud to dám dovnitř kódu události click, nevím, co mám jako argument té rekurze zvolit. Pokud tam nacpu string, tak rekurze ani nezačne. Pokud ji zavolám přes Call tak se taky nic neděje. Přesněji, rekuze proběhne, ale jdnou když tam dosadím nějaký string a to tak, že si jej celý načte. Chyby žádné, watch window taky nepomohlo.

Dávám celý kód:

Public Class Form1

    Dim znaky As String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    Dim delka As Integer
    Dim ff As clsFTP = Nothing
    Dim psw As String = Nothing


    Private Sub GenerujHeslo(ByVal jizMame As String)
        If jizMame.Length < delka Then
            ' nekompletní heslo, přidat každý z přípustných znaků a pokračovat v generování
            For i As Integer = 0 To znaky.Length - 1
                GenerujHeslo(jizMame & znaky(i))
                rtbLog.Text &= "Heslo: " & jizMame & vbCrLf
            Next
        Else
            ' kompletní heslo, vyzkoušet ho
            psw = jizMame
            rtbLog.Text &= " Heslo: " & psw & vbCrLf
        End If
    End Sub



    Private Sub cmdGenerovat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGenerovat.Click

        'Kontrolní údaje
        rtbLog.Text = "Bylo zahájeno zjištění hesla s následujícími parametry: " & vbCrLf
        rtbLog.Text &= " FTP účet: " & txtFTP.Text & vbCrLf
        rtbLog.Text &= " Login: " & txtLogin.Text & vbCrLf
        rtbLog.Text &= " Délka hesla: " & txtLenPsw.Text & vbCrLf & vbCrLf

        Try
            'Vytvoření instance FTP třídy
            ff = New clsFTP()
            'Nastavení údajů na připojení
            ff.RemoteHost = txtFTP.Text
            ff.RemoteUser = txtLogin.Text
            ff.RemotePassword = psw
        Catch ex As Exception
            'Zachycení vyjímky
            MsgBox(ex.Message)
            MsgBox("Hláška FTP Serveru: : " & ff.MessageString)
        Finally
            'uzavření spojení
            ff.CloseConnection()
        End Try

    End Sub
End Class

PSko: S FTP umím již zacházet s jakoukoliv událostí, takže tohle problém už žádný není pokud tam doplním přesné údaje pro nastavení, můžu si na FTP dělat co chci.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

odhaleno - návratová hodnota je globální v rekurzi a to nelze...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To připojování k serveru musíte volat z té rekurzivní procedury, původně jsem vám na to nachystal tu funkci TestPassword. Ta dostane již hotové heslo, které vyzkouší. Pokud uspěje, tak třeba vyhodí hlášku nebo tak něco, to si už musíte napsat sám.

Tlačítkem pouze nastavte délku hesla a přípustné znaky a zavolejte jednoduše GeneratePassword(""). Procedura vygeneruje hesla a všechna je vyzkouší.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback