Newsgroup: it.comp.lang.visual-basic
Titolo: Generazione stringhe casuali x password

Ho la necessità di creare una serie di account di windows 2003 server, è
attiva la complessità delle password e quindi devo creare delle stringhe con
obbligatorio numeri, caratteri minuscoli e maiuscoli con lunghezza
predefinita.
Utilizzo Access per la creazione degli account.
Sto utilizzando una funzione trovata su interner dove passo come parametro
ID del record per avere stringhe diverse nei diversi record.
Tutto funziona, solo che ho notato che in alcuni casi non sempre sono
presenti i componenti previsti dalle password, a volte mancano numeri o
caratteri minuscoli o maiuscoli.
La funzione utilizzata è riportata sotto.
Vista la mia inesperienza in VB, qualcuno può indicarmi le modifiche da fare
per arrivare all'obiettivo?
O magari se avete altro codice che esegue la funzione indicata.
Grazie a tutti.
Public Function passw(c)
Dim ChooseType As Integer
Dim UpperLower As Integer
Dim pwStore As String
Dim pwLength As Integer
Dim pw As String
passw = " "
'Length of password'
pwLength = 8
For I = 1 To pwLength
ChooseType = Round(Rnd)
If ChooseType = 1 Then
'Number'
pwStore = Chr(Int((57 - 48 + 1) * Rnd + 48))
Else
'Alphabet'
UpperLower = Round(Rnd)
If UpperLower = 1 Then
'Upper Case'
pwStore = UCase$(Chr(Int((90 - 65 + 1 + s) * Rnd + 65)))
Else
'Lower Case'
pwStore = LCase$(Chr(Int((90 - 65 + 1 + s) * Rnd + 65)))
End If
End If
pw = pw & pwStore
passw = pw
Next I
End Function

 da fare per arrivare all'obiettivo?
Analizzala dopo averla creata, cioè mettila in un loop che ne
controlli la "qualità". Se non ci sono almeno blablabla, dove
blablabla sono i parametri necessari, la rifiuti e ne crei un'altra.
************
Un punto però: limitare in qualunque modo la formazione della
PWD in alcuni casi può significare indebolirne anziché rafforzarne
la robustezza. O meglio: la sicurezza della singola chiave è
maggiore, quella della serie, di chiavi viene ad essere minore.
In effetti stai ponendo dei limiti allo spazio delle chiavi, nella serie,
obbligando a scegliere non una qualunque delle chiavi possibili,
ma una che abbia determinati parametri, quindi in effetti stai
restringendo il campo di ricerca per un eventuale attacco brute force.
Oh, questa è una limitazione, finora, solo teorica: tutto dipende
dall'ambito di applicazione della pwd.
P.S.: io uso questa, con eventuali modifiche; per esempio,
per gli utenti normali non uso i caratteri speciali, solo gli alfanumerici:
'*************************
Private Sub Command1_Click()
    Dim N As Integer
    Dim Password As String
    Dim Indice As Integer
    Dim CarAmmessi As String
    Dim Carattere As String
     '    CarAmmessi = "abcdefghijklmnopqrstuvwxyz" & _
     '   "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" & _
     '   "-_.:,;'=)(/&%$£!?<>[]\^|" ' se alcuni non li vuoi o puoi utilizzare, li togli.
    '    la stringa è modificata già rimescolando a mano, non si sa mai, ipotizzando
    '    una debolezza sfruttabile della randomizzazione.
    '    Probabilmente è inutile, ma io sono paranoico :-)
    CarAmmessi = "Frs7S?yzI6M]\efop%$£!89KxE<WtN1[OwX2Ta" & _
"-mnBC|,RJcdV43Y>QbAv^hGHq.;'=LDu_gZijklU:50P)(/&"
    Randomize Timer
    For N = 1 To 10 ' lunghezza PWD, nel caso cambiala
        Do
        Indice = Int(Len(CarAmmessi) * Rnd + 1)
            Carattere = Mid$(CarAmmessi, Indice, 1)
            If InStr(Password, Carattere) = 0 Then Exit Do ' no ripetizioni
                                                                                    ' dello stesso car
        Loop
        Password = Password & Carattere
    Next N
    'MsgBox Password ' non la scriviamo certo in un file... te la copi a manina ;-)
    ' Al limite puoi attivare la riga seguente
     Debug.Print Password
End Sub
'*************************
Bye, G.