Søger du en specifik kategori?

 



Oprettet tir. d. 10. februar 2009 kl. 13:08

limemedia
Guidens karaktér
1
2
3
4
5

Automatisk generering af kodeord via PHP

Grundig gennemgang af hvorledes man via et simpelt bibliotek, kan oprette nærmest enhver type kodeord. Ialt 6 "sværhedsgrader" inkluderet ! Lige til at ligge i ethvert login, forum, bruger system.
Ofte står man i en situation, hvor en bruger skal kunne identificeres unikt overfor systemet. I en sådan situation, kan man vælge om man ønsker brugeren selv skal indtaste et kodeord, modtage et inspirerende kodeord fra systemet eller fastligges på et fast kodeord som systemet så generer til brugeren.

Herunder har jeg forsøgt at skabe et generel funktions bibliotek, der kan generere alt fra yderst simple til meget komplekse kodeord, samt en funktion der kan skabe "udtalelige" kodeord, der i test har vist sig nemmere for brugerne at huske; men på samme tid også mere forudsigelige for brugere der ønsker at kompromittere et kodeord.

Systemet vil også kunne anvendes til at generere tekststrenge, til anvendelse i "verificer min brugerprofil" scenarier, hvor tilfældige tekststrenge skal anvendes.

Biblioteket består af tre funktioner, password_generate, password_generate_advanced og password_generate_pronouncable, hvor password_generate er ment som en wrapper funktion, der kalder de to andre. Der er ingen krav til at anvende denne wrapper funktion, dens formål er dog at simplificere brugen. Den mere advancerede bruger ønsker evt at anvende de specialiserede funktioner.

Password_generate, har tre parametre, $nice, $length og $allowchars. $nice angiver "sværhedsgraden" af kodeordet, som er et heltal mellem 1 og 6, hvor sværhedsgraden stiger med et højere tal. $length angiver den ønskede længde af kodeordet - hvis ingen længde er angivet, vil der genereres en tilfældig længde mellem 5 og 9 tegn. $allowchars kan anvendes til at angive hvilke specifikke tegn der må indgå i kodeordet, parameteren her forventer en streng. Det er muligt at prioritere visse tegn ved at angive disse flere gange i strengen, måtte man have sådanne ønsker.

Sværhedsgraderne er inddelt som følger:
  1: Generer et udtaleligt kodeord
  2: Generer et kodeord bestående af lowercase a-z bogstaver og tal mellem 0 og 9
  3: Ligesom 2, men tegnene 'O01lI5S' giver ofte problemer med læsbarheden og afvises som gyldige tegn
  4: Ligesom 3, men tillader uppercase A-Z bogstaver
  5: Ligesom 4, men tillader specialtegn '!#$%&()*+-./;<=>@\_'
  6: Tillader tal, små og store bogstaver samt specialtegn, uden at korrigere for læsbarhed problemer
  Hvis sværhedsgrad er angivet forkert, vil 3 være valgt som en medium løsning.
 
Held og lykke med oprettelsen af kodeord. Funktionen vil i sin helhed inklusiv indrykninger og formatering kunne findes på http://www.ljweb.com/ (...)


Kode eksempel 
<?php
  # Seed the random generator - consider doing this in a config file once for the entire site
  mt_srand((double)microtime()*1000000);

  function password_generate($nice = 1, $length=0, $allowchars = "") {
      # Find random password length
      if (!$length) $length = mt_rand(5, 9);

      # pronouncable password
      if ($nice == 1) return password_generate_pronouncable($length);
      # lowercase only, fix similar
      else if ($nice == 2) return password_generate_advanced($length, 0, 1, 0, 0, 1, $allowchars);
      # lowercase and numbers only, fix similar
      else if ($nice == 3) return password_generate_advanced($length, 0, 1, 1, 0, 1, $allowchars);
      # both lower and uppercase chars and numbers , fix similar
      else if ($nice == 4) return password_generate_advanced($length, 1, 1, 1, 0, 1, $allowchars);
      # all types of letters, including special chars, fix similar
      else if ($nice == 5) return password_generate_advanced($length, 1, 1, 1, 1, 1, $allowchars);
      # oh my :) the real deal - get it all and dont fix similars
      else if ($nice == 6) return password_generate_advanced($length, 1, 1, 1, 1, 0, $allowchars);

      # $nice contained illegal value, go for the easy 3
      else return password_generate_advanced($length, 1, 1, 1, 0, 1);
  }


  function password_generate_advanced($length = 8, $allow_uppercase = 1, $allow_lowercase = 1, $allow_numbers = 1, $allow_special = 1, $fix_similar = 0, $valid_charset = "") {
      # Create a list of usable chars based upon the parameters
      if (!$valid_charset) {
        if ($allow_uppercase) $valid_charset .= 'ABCDEFGHIJKLMNOPQRSTUVXYZ';
        if ($allow_lowercase) $valid_charset .= 'abcdefghijklmnopqrstuvxyz';
        if ($allow_numbers) $valid_charset .= '0123456789';
        // if lowercase and uppercase, the chance for a number is less, and thus doubled in the char array
        if ($allow_numbers && $allow_lowercase && $allow_uppercase) $valid_charset .= '0123456789';
        if ($allow_special) $valid_charset .= '!#$%&()*+-./;<=>@\_';
      }

      # Find the charset length
      $charset_length = strlen($valid_charset);

      # If no chars is allowed, return false
      if ($charset_length == 0) return false;

      # Initialize the password and loop till we have all
      $password = "";
      while(strlen($password) < $length) {
        # Pull out a random char
        $char = $valid_charset[mt_rand(0, ($charset_length-1))];
           
        # If similar is true, check if string contains mistakeable chars, add if accepted
        if (($fix_similar && !strpos('O01lI5S', $char)) || !$fix_similar) $password .= $char;
      }

      # Return password
      return $password;
  }


  function password_generate_pronouncable($length = 8) {
      # Initialize valid char lists
      $valid_consonant = 'bcdfghjkmnprstv';
      $valid_vowel = 'aeiouy';
      $valid_numbers = '0123456789';

      # Find the charset length
      $consonant_length = strlen($valid_consonant);
      $vowel_length = strlen($valid_vowel);
      $numbers_length = strlen($valid_numbers);

      # Initialize the password and loop till we have all
      $password = "";
      while(strlen($password) < $length) {
        # Pull out a random set of pronouncable chars
        if (mt_rand(0, 2) != 1) $password .= $valid_consonant[mt_rand(0, ($consonant_length-1))].$valid_vowel[mt_rand(0, ($vowel_length-1))].$valid_consonant[mt_rand(0, ($consonant_length-1))];
        else $password .= $valid_numbers[mt_rand(0, ($numbers_length-1))];
      }

      return substr($password, 0, $length);
  }
?>

Skrevet søn. d. 18. januar 2004 kl. 21:50| #1

sandbox (50.355 point)
God og anvendelig artikel Især godt at der gives mulighed for forskellige typer password.

Skrevet ons. d. 24. marts 2004 kl. 20:56| #2

dmcn (41.459 point)
www.mcnally.dk
Virkelig brugbar artikel med grundig forklaring af funktionerne og gode pointer omkring "gode" kodeord.
Att skize_someone: Lars har skrevet begge artikler. ;) (http://www.eksperten.dk/ (...))

Skrevet ons. d. 27. oktober 2004 kl. 20:53| #3

skizo_someone (13.495 point)
Jamen i få fald... rigtig god artikel :D

Skriv en kommentar



Mest populære guides

Guidens karakter
!!!Karaktér: 3
14 stemmer
31/01 - 2011
Af: heinzdmx

Dropbox - gratis online lagerplads

Jeg vil i denne guide forklare lidt om hvad Dropbox er og også hvordan du får mest mulig plads på Dropbox. Dropbox er kort sagt en service hvor du har dine data lagt til backup på både nettet og din egen computer.
Guidens karakter
!!!Karaktér: 4
33 stemmer
02/02 - 2009
Af: jkrons

Dato- og tidsberegninger i Excel

En introduktion til simple beregninger med dato og tid i Excel. Opdateret med afsnit om beregning af tillæg.
Excel  |  Læs »
Guidens karakter
!!!Karaktér: 4
21 stemmer
06/11 - 2011
Af: fromsej

Sådan fjerner du virus og malware

Udviklingen går stærkt på "skidt"fronten, så vi har sammensat en ny og effektiv programpakke til fjernelse af det.
Virus  |  Læs »

Log ind

   

   



   




Tips & Tricks fra PC World

Teaser billede

Top 5: Virale YouTube-videoer fra Danmark

Lægger du mærke til de mere eller mindre skjulte reklamebudskaber, når du ser videoer på nettet? Vi har taget et kig på fem utrolige danske videoer, som er blevet virale hit.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan fupper smarte svindlere dig på Facebook

Se hvordan du undgår Facebook-fup i fremtiden.


Nyheder fra Computerworld

Teaser billede

App-udvikling 2.0: Sådan er den perfekte app

ComputerViews: Den værste app-hype er ved at have lagt sig, og nu ser vi konturerne af fremtidens app-design. Men hvordan udnytter man de mobile muligheder optimalt?


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger