Vi è mai capitato di dover generare una lunga serie di password random da inserire in un database? Esistono diversi generatori, anche piuttosto sofisticati e flessibili nelle regole, ma normalmente generano una password alla volta. Ne ho trovati alcuni, che nelle versioni freeware, generano un massimo di 100 password. Ma se abbiamo la necessità di generarne 10000 o più?
Ho pensato di creare una formula per OpenOffice Calc, che possa generare una stringa alfanumerica rispettando certi requisiti di casualità, lunghezza e robustezza.
Il codice che genera la password è tratto da questo articolo, e tradotto in linguaggio Basic per OO.
E’ possibile stabilire la lunghezza della password e la robustezza. Quest’ultima viene definita da un valore minimo di 0 fin ad un massimo di 8
- Robustezza = 0, solo consonanti e vocali minuscole
- Robustezza = 1, consonanti minuscole e maiuscole e vocali minuscole
- Robustezza = 2, consonanti minuscole e maiuscole e vocali minuscole e maiuscole
- Robustezza = 4, consonanti minuscole e maiuscole, numeri e vocali minuscole e maiuscole
- Robustezza = 8, consonanti minuscole e maiuscole, numeri, caratteri speciali e vocali minuscole e maiuscole
Per la compilazione e l’esecuzione della macro in OpenOffice Calc, ho seguito scrupolosamente le indicazioni di questo post sul sito Wiki di OpenOffice.
In pratica si tratta di creare una nuova macro associata ad un foglio di calcolo “Calc”, utilizzando:
Strumenti > Macro > Organizza Macro > OpenOffice.org Basic
Qunidi cliccando sul bottone “Gestisci” e sul tab “Libreria”, è possibile creare una nuova libreria associata al foglio di calcolo, nel nostro caso in calcTestMacros.ods creo (con poca fantasia…) la libreria: AuthorsCalcMacros.
Utilizzando il bottone “Modifica” si apre un IDE per poter scrivere, con l’aiuto del Syntax highlighting, il codice della macro in linguaggio Basic.
La macro in realtà corrisponde all’implementazione, ma non è la funzione che richiameremo all’interno delle celle del foglio di lavoro. Il motivo è da imputarsi al fatto che, a parte la libreria di default denominata “Standard”, tutte le altre non vengono automaticamente caricate all’avvio, dunque si rende necessario creare una funzione che potremmo chiamare “prototipo” nella libreria “Standard”, che a sua volta richiama l’implementazione vera e propria.
Questo è il codice della implementazione inserito nella libreria “AuthorsCalcMacros”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | Function Passwdgen_implementation(ByVal length AS Integer, ByVal strength As Integer) Dim vowels As string Dim consonants As string Dim password As string Dim alt As Integer Dim i As Integer vowels = "aeuy" consonants = "bdghjmnpqrstvz" If (strength >= 1) Then consonants = consonants + "BDGHJLMNPQRSTVWXZ" End If If (strength >= 2) Then vowels = vowels + "AEUY" End If If (strength >= 4) Then consonants = consonants + "23456789" End If If (strength >= 8) Then consonants = consonants + "@#$%" End If password = "" Randomize() alt = Int((2 * Rnd) + 1) For i = 0 To length-1 If (alt = 2) Then password = password + Mid(consonants, Int((Len(consonants) * Rnd) + 1), 1) alt = 1 Else password = password + Mid(vowels, Int((Len(vowels) * Rnd) + 1), 1) alt = 2 End If Next i Passwdgen_implementation = password End Function |
Questo è il codice del “prototipo” inserito nella libreria “Standard”:
1 2 3 4 5 6 | Function Passwdgen(ByVal l as Integer, ByVal s as Integer) If NOT BasicLibraries.isLibraryLoaded("AuthorsCalcMacros") Then BasicLibraries.LoadLibrary("AuthorsCalcMacros") End If Passwdgen = Passwdgen_Implementation(l, s) End Function |
Ed ecco infine il risultato della funzione nel foglio di calcolo:
Per permettere l’esecuzione delle macro, è necessario impostare il livello di sicurezza su “Medio”
Questo parametro si imposta da:
Strumenti > Opzioni
Selezionare: “Sicurezza, quindi premere il bottone “Sicurezza delle macro…”
Aprendo il documento, ovviamente è necessario abilitare le macro, come mostrato nella figura qui sotto:
Download:
Il documento ods che contiene la macro è disponibile qui
Riferimenti e Links: