Tittar man på topplistor över vanliga lösenord finns t.ex. både ”1234” och ”Vinter2017” ganska högt upp. Lösenord ska egentligen vara svårare, dvs. innehålla fler tecken och inga ord som är lätta att komma ihåg. Apple har t.ex. börjat med att föreslå ”svåra lösenord” som sparas för alla dina Apple-enheter, men hur svårt är det att själv göra ett ”svårt lösenord”? Det går såklart att trycka valfria tangenter i slumpmässig följd, eller låta katten gå över tangentbordet. Jag har tröttnat på det och använder (såklart) FileMaker för att föreslå svåra lösenord.
Jag har gjort en beräkning, en formel, för att räkna fram ett lösenord. Det första du behöver göra är att bestämma vilka tecken som ska finnas i ett lösenord. Det kan vara opraktiskt att t.ex. ha tecknen 0 och O i lösenord då det är svårt att se skillnad på dem, likaså 1, I (stora I) och l (lilla L).
Jag fick fram följande tecken som kan tänkas finnas i ett lösenord:
"23456789abcdefghijkmnopqrstuvxyzABCDEFGHJKLMNPQRSTUVXYZ!%()<>#"
Det är siffror (förutom 0 och 1), små bokstäver (förutom l), stora bokstäver (förutom I och O) och några specialtecken. Med funktionerna Random och Middle får jag ett slumpmässigt valt tecken av de som jag valt. Använder jag sedan funktionen While (som finns i FileMaker 18 eller senare) sätter jag enkelt ihop så många slumpmässigt valda tecken som jag vill att lösenordet ska bestå av.
Eftersom jag kommer använda beräkningen ofta gör jag en anpassad funktion med en parameter som är den önskade längden på lösenordet.
Funktionen mvPassword (len) ser ut så här:
Let([ chars = "23456789abcdefghijkmnopqrstuvxyzABCDEFGHJKLMNPQRSTUVXYZ!%()<>#" ]; While ( [ i = 0; s = "" ] ; i < len ; [ i = i + 1; s = s & Middle(chars;Int(Random*Length(chars))+1;1) ] ; s ) )
Som exempel får jag ”f9GAAdSsumgxKvfzCyJ)RJLYTq9rdL” som ett lösenord med längden 30. Det är väl svårt nog?
Många kräver att ett lösenord ska bestå av minst en gemen (liten) bokstav, minst en versal (stor bokstav), minst en siffra och minst ett specialtecken. Ett enkelt sätt att få ett sådant lösenord är att låta FileMaker skapa lösenord tills det innehåller minst ett tecken av varje kategori.
Jag behöver ändra funktionen ovan något, jag kallar den för mvPasswordEx (chars; len). Parametern chars är alla möjliga tecken och len är som tidigare längden. Funktionen är nästan likadan som tidigare och ser ut så här:
While ( [ i = 0; s = "" ] ; i < len ; [ i = i + 1; s = s & Middle(chars;Int(Random*Length(chars))+1;1) ] ; s )
Jag gör sedan en ny anpassad funktion mvPasswordOneEach (len) där jag skapar olika lösenord tills det innehåller minst ett tecken av varje kategori. Jag använder funktionen While för att skapa lösenord tills villkoret är uppfyllt.
Observera att längden på lösenordet måste vara minst 4 tecken, annars kommer kravet aldrig att uppfyllas. Ju kortare lösenord du önskar, desto längre tid kommer FileMaker behöva för att hitta ett som uppfyller villkoren (ett tecken av varje kategori).
Jag använder funktionen Let och skapar variabler för tecknen i respektive kategori (siffror, små bokstäver, stora bokstäver och specialtecken). Med funktionen Filter kontrollerar jag om villkoren är uppfyllda, alla 4 villkoren måste vara uppfyllda innan While-funktionen avslutas och det senast skapade lösenordet returneras som resultat. Jag sätter ihop alla de 4 tecken-kategorierna till en text och skickar in den som parameter till funktionen mvPasswordEx (se ovan) tillsammans med den önskade längden för att skapa lösenorden.
Så här ser funktionen ut:
If (len >= 4; Let([ digits = "23456789"; lowerchars = "abcdefghijkmnopqrstuvxyz"; upperchars = "ABCDEFGHJKLMNPQRSTUVXYZ"; specialchars = "!%()#<>" ]; While ( [ s = "" ] ; (Filter ( s ; digits ) = "" or Filter (s; lowerchars) = "" or Filter (s; upperchars) = "" or Filter (s; specialchars) = ""); [ s = mvPasswordEx(digits & lowerchars & upperchars & specialchars; len) ] ; s ) ); "Password must be 4 characters or longer")
mvPasswordOneEach (12) kan t.ex. ge resultatet ”fQ)ecVJY5jtR”.
Ofta behöver jag klistra in lösenordet nånstans. För att kopiera det skapade lösenordet till urklipp behövs ett fält i en databas, jag brukar använda ett global-fält t.ex. med namnet gPassword. Se till att fältet finns på någon layout och gör ett script som går till layouten med fältet gPassword, tilldelar ett nytt lösenord till fältet gPassword och kopierar innehållet i fältet.
Scriptet kan se ut så här:
Gå till layout ["Lösenordslayout"] Tilldela fält [gPassword; mvPasswordOneEach (20)] Kopiera [Markera; gPassword]