Era il 2 febbraio del 2009 quando per la prima volta è comparso un articolo riguardante un servizio tanto “stupido” quanto utile allo stesso tempo.
A due anni di distanza dalla sua prima versione (più che stabile, visto il lavoro che doveva svolgere), oggi vi presento una seconda versione che va incontro ad alcune richieste ricevute nel frattempo (grazie Marco, grazie Paolo, ndr): 9 caratteri, un ciclo in grado di mischiare meglio le lettere e i numeri disponibili, la possibilità di copiare e incollare la password priva di spazio finale (un piccolo bug che c’era nella precedente versione, almeno via Firefox e Chrome).
L’indirizzo è rimasto lo stesso:
services.gxware.org/passwd
nonostante lo script che sta alla base della pagina sia cambiato diventando decisamente più ristretto (script originale: TotallyPHP):
<?php function createRandomPassword($len) { if (!isset($len)) { $len = 9; }; $chars = &amp;amp;amp;quot;abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ&amp;amp;amp;quot;; $charsLen = (strlen($chars)-1); srand((double)microtime()*1000000); $i = 0; $pass = '' ; while ( $i &amp;amp;amp;lt; $len ) { $num = rand() % $charsLen; $tmp = substr($chars, $num, 1); $pass = $pass . $tmp; $i++; } return $pass; } $password = createRandomPassword(); echo $password; ?>
La seconda delle 3 novità consiste nel fatto che –se necessario– potrete scaricare una differente versione del tool anche in locale, uno script in Visual Basic che vi permetterà –una volta avviato– di scegliere il numero di password da generare e salvarle in un file di testo, una per ciascuna riga così da poter rapidamente copiare ed incollare ciò che vi serve. Il codice è stato realizzato e pubblicato su Tek-Tips.com, ed è disponibile all’indirizzo:
public.gfsolone.com/tools/passwd/randomPasswd.vbs
Per scaricarlo cliccate con il tasto destro sul collegamento e salvatelo in locale sul vostro PC (Salve destinazione come …)
'========================================================================== ' ' NAME: RandomPasswordGenerator.vbs ' ' AUTHOR: Mark D. MacLachlan , The Spider's Parlor ' URL: http://www.thespidersparlor.com ' DATE : 7/29/2004 ' MODIFICATIONS: ' 9/2/2008 Added dictionary object to ensure ' uniqueness of passwords ' ' COMMENT: Generates Random Passwords meeting &amp;amp;amp;quot;Complex&amp;amp;amp;quot; Requirements ' By default will generate a 6 digit password. ' Edit line passLen = 6 to change length '========================================================================== Option Explicit Dim pGenNum, newpass, passList, inFlag, pgLength, x, fso, ts, passLen Const ForWriting = 2 passLen = 9 'Give inFlag (input Flag) an initial value to ensure we run once inFlag = &amp;amp;amp;quot;Seed&amp;amp;amp;quot; Do While inFlag &amp;amp;amp;lt;&amp;amp;amp;gt; pGenNum pGenNum = InputBox(&amp;amp;amp;quot;How many passwords would you like to create?&amp;amp;amp;quot; &amp;amp;amp;amp; vbCrLf &amp;amp;amp;amp; _ &amp;amp;amp;quot;Enter a Numeric Value&amp;amp;amp;quot; &amp;amp;amp;amp; vbCrLf &amp;amp;amp;amp; _ &amp;amp;amp;quot;Blank Entry Will Cancel Script&amp;amp;amp;quot;,&amp;amp;amp;quot;Enter Number of Passwords to Create&amp;amp;amp;quot;) 'Quit if no entry If pGenNum = &amp;amp;amp;quot;&amp;amp;amp;quot; Then WScript.Quit 'Now clear inFlag so we can compare it to the pGenInput going forward inFlag = &amp;amp;amp;quot;&amp;amp;amp;quot; pgLength = Len(pGenNum) 'Enumerate each character to ensure we only have numbers For x = 1 To pgLength If Asc(Mid(pGenNum,x,1)) &amp;amp;amp;lt; 48 Or Asc(Mid(pGenNum,x,1)) &amp;amp;amp;gt; 57 Then inFlag = &amp;amp;amp;quot;&amp;amp;amp;quot; Else 'Build inFlag one character at a time if it is a number. inFlag = inFlag &amp;amp;amp;amp; Mid(pGenNum,x,1) End If Next 'We made it through each character. If not equal prompt for a number. If inFlag &amp;amp;amp;lt;&amp;amp;amp;gt; pGenNum Then inFlag = &amp;amp;amp;quot;&amp;amp;amp;quot; Loop 'Generate the number of required passwords. 'Use a dictionary object to ensure uniqueness. Dim objDict Set objDict = CreateObject(&amp;amp;amp;quot;Scripting.Dictionary&amp;amp;amp;quot;) Do Until objDict.Count = CInt(pGenNum) newpass = generatePassword(passLen) If Not objDict.Exists(newpass) Then objDict.Add newpass, &amp;amp;amp;quot;Unique Password&amp;amp;amp;quot; passList = passList &amp;amp;amp;amp; newpass &amp;amp;amp;amp; vbCrLf End If Loop 'Now save it all to a text file. Set fso = CreateObject(&amp;amp;amp;quot;Scripting.FileSystemObject&amp;amp;amp;quot;) Set ts = fso.CreateTextFile (&amp;amp;amp;quot;PasswordList.txt&amp;amp;amp;quot;, ForWriting) ts.write passList MsgBox &amp;amp;amp;quot;Passwords saved to PasswordList.txt&amp;amp;amp;quot;,,&amp;amp;amp;quot;Passwords Generated&amp;amp;amp;quot; set ts = nothing set fso = nothing Function generatePassword(PASSWORD_LENGTH) Dim NUMLOWER, NUMUPPER, LOWERBOUND, UPPERBOUND, LOWERBOUND1, UPPERBOUND1, SYMLOWER, SYMUPPER Dim newPassword, count, pwd Dim pCheckComplex, pCheckComplexUp, pCheckComplexLow, pCheckComplexNum, pCheckComplexSym, pCheckAnswer NUMLOWER = 48 ' 48 = 0 NUMUPPER = 57 ' 57 = 9 LOWERBOUND = 65 ' 65 = A UPPERBOUND = 90 ' 90 = Z LOWERBOUND1 = 97 ' 97 = a UPPERBOUND1 = 122 ' 122 = z SYMLOWER = 33 ' 33 = ! SYMUPPER = 46 ' 46 = . pCheckComplexUp = 0 ' used later to check number of character types in password pCheckComplexLow = 0 ' used later to check number of character types in password pCheckComplexNum = 0 ' used later to check number of character types in password pCheckComplexSym = 0 ' used later to check number of character types in password ' initialize the random number generator Randomize() newPassword = &amp;amp;amp;quot;&amp;amp;amp;quot; count = 0 DO UNTIL count = PASSWORD_LENGTH ' generate a num between 2 and 10 ' if num &amp;amp;amp;lt;= 2 create a symbol If Int( ( 10 - 2 + 1 ) * Rnd + 2 ) &amp;amp;amp;lt;= 2 Then pwd = Int( ( SYMUPPER - SYMLOWER + 1 ) * Rnd + SYMLOWER ) ' if num is between 3 and 5 create a lowercase Elseif Int( ( 10 - 2 + 1 ) * Rnd + 2 ) &amp;amp;amp;gt; 2 And Int( ( 10 - 2 + 1 ) * Rnd + 2 ) &amp;amp;amp;lt;= 5 Then pwd = Int( ( UPPERBOUND1 - LOWERBOUND1 + 1 ) * Rnd + LOWERBOUND1 ) ' if num is 6 or 7 generate an uppercase Elseif Int( ( 10 - 2 + 1 ) * Rnd + 2 ) &amp;amp;amp;gt; 5 And Int( ( 10 - 2 + 1 ) * Rnd + 2 ) &amp;amp;amp;lt;= 7 Then pwd = Int( ( UPPERBOUND - LOWERBOUND + 1 ) * Rnd + LOWERBOUND ) Else pwd = Int( ( NUMUPPER - NUMLOWER + 1 ) * Rnd + NUMLOWER ) End If newPassword = newPassword + Chr( pwd ) count = count + 1 'Check to make sure that a proper mix of characters has been created. If not discard the password. If count = (PASSWORD_LENGTH) Then For pCheckComplex = 1 To PASSWORD_LENGTH 'Check for uppercase If Asc(Mid(newPassword,pCheckComplex,1)) &amp;amp;amp;gt;64 And Asc(Mid(newPassword,pCheckComplex,1))&amp;amp;amp;lt; 90 Then pCheckComplexUp = 1 'Check for lowercase ElseIf Asc(Mid(newPassword,pCheckComplex,1)) &amp;amp;amp;gt;96 And Asc(Mid(newPassword,pCheckComplex,1))&amp;amp;amp;lt; 123 Then pCheckComplexLow = 1 'Check for numbers ElseIf Asc(Mid(newPassword,pCheckComplex,1)) &amp;amp;amp;gt;47 And Asc(Mid(newPassword,pCheckComplex,1))&amp;amp;amp;lt; 58 Then pCheckComplexNum = 1 'Check for symbols ElseIf Asc(Mid(newPassword,pCheckComplex,1)) &amp;amp;amp;gt;32 And Asc(Mid(newPassword,pCheckComplex,1))&amp;amp;amp;lt; 47 Then pCheckComplexSym = 1 End If Next 'Add up the number of character sets. We require 3 or 4 for a complex password. pCheckAnswer = pCheckComplexUp+pCheckComplexLow+pCheckComplexNum+pCheckComplexSym If pCheckAnswer &amp;amp;amp;lt; 3 Then newPassword = &amp;amp;amp;quot;&amp;amp;amp;quot; count = 0 End If End If Loop 'The password is good so return it generatePassword = newPassword End Function
Ultima novità è l’integrazione del Random Password Generator all’interno degli strumenti “mobili” del Network GxWare, da poco trasferiti sotto il nuovo dominio network.gxware.org/iphone:
network.gxware.org/iphone/passwd.php
Questo vi permetterà di generare rapidamente password sufficientemente complesse avendo a portata di mano solo il vostro telefono ed una connessione a internet.
Per chi volesse invece continuare ad usare la prima versione, ho lasciato la possibilità di accedere alla precedente pagina iniziale semplicemente puntando il browser a services.gxware.org/passwd/v1.php.
Buon lavoro! :-)
Grazie al suggerimento dell’utente “caccolangrifata“ lo script è stato modificato includendo l’utilizzo di lettere maiuscole (oltre che minuscole, come di default) e la possibilità di specificare una differente quota caratteri della password. La modifica è stata operata sia sulla pagina del servizio standard che quella mobile! :-)
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)