OpenOffice Calc: come creare una funzione che genera password random

Logo della OpenOffice Calc

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:

screenshot del foglio di calcolo: calcTestMacros.ods

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:

screenshot della finestra di dialogo abilita macro

Download:

Il documento ods che contiene la macro è disponibile qui

Riferimenti e Links: