Avatar billede anthony Nybegynder
15. april 2001 - 18:40 Der er 11 kommentarer og
1 løsning

random password\'s med PHP

Hvordan får jeg php til at generere X antal random password\'s?
password\'et skal være 16 tegn og skal være en blanding af tal/bogstaver?
(der må ikke være dubleter)
Avatar billede no_doubt Nybegynder
15. april 2001 - 18:46 #1
Kan du bruge asp ?
Avatar billede morten_rasmussen Nybegynder
15. april 2001 - 18:51 #2
no_doubt > Øhh...
Er det her ikke PHP ?

MOrten Rasmusen
Avatar billede lojmann Nybegynder
15. april 2001 - 18:57 #3
Tja, sæt den til at lave nogle timestamps, med 1 sekunds mellemrun, det antal gange du nu skal bruge passwords....?
Avatar billede mortenfn Nybegynder
15. april 2001 - 19:08 #4
den her giver et tilfældigt bokstev

$t=rand(49,122);
echo chr($t);

så laver du bare en lække med det antal bokstaver deu ønsker
Avatar billede mortenfn Nybegynder
15. april 2001 - 19:44 #5
her var den jeg lavede sidst:

$all = explode( \" \", 
          \"a b c d e f g h i j k l m n o p q r s t u v w x y z \" 
        . \"A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \" 
        . \"0 1 2 3 4 5 6 7 8 9\"); 

for($i=0;$i<16;$i++){
  srand((double)microtime()*10000000); 
  $randy = rand(0, 61); 
  $kode .= $all[$randy];} 

echo $kode;
Avatar billede mortenfn Nybegynder
15. april 2001 - 19:55 #6
nu kommer tegnet kun een gang

$all = explode( \" \", 
          \"a b c d e f g h i j k l m n o p q r s t u v w x y z \" 
        . \"A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \" 
        . \"0 1 2 3 4 5 6 7 8 9\"); 

while (strlen($kode)<16){
  srand((double)microtime()*10000000); 
  $randy = rand(0, 61); 
    $tegn= $all[$randy];
  $kode = str_replace ($tegn,\'\',$kode);
  $kode.=$tegn;
} 
   
echo $kode;

;o)*
Avatar billede anthony Nybegynder
15. april 2001 - 20:04 #7
mange tak for hjælpen
Avatar billede alvion Nybegynder
15. april 2001 - 21:01 #8
mortenfn -> Det var sgu godt tænkt, den uden gentagelser...

Der er dog lige et par ændringer jeg ville lave, for at gøre koden enklere (med udgangspunkt i dit script):

// Der er ingen grund til at lave et array af tegn
// en string er allerede et array af tegn
$all = \"abcdefghijklmnopqrstuvwxyz\";
$all .= \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";
$all .= \"0123456789\";

// Random seed skal kun gøres én gang
srand((double)microtime()*10000000); 

while (strlen($kode)<16){
  // Brug strlen istedet for en konstant
  // Så er det nemmere af mindske/udvide $all
  $randy = rand(0, strlen($all)-1); 
  $tegn = $all[$randy];
  $kode = str_replace($tegn,\'\',$kode);
  $kode .=$tegn;
} 
   
echo $kode;
Avatar billede alvion Nybegynder
15. april 2001 - 21:03 #9
Desuden så undgå følgende tegn i et password:

ijlo
IO
01

Det er allesammen tegn/tal, der nemt kan forveksles med hinanden. Så fjern dem fra $all
Avatar billede mortenfn Nybegynder
15. april 2001 - 21:07 #10
fino jeg retter

;O)
Avatar billede alvion Nybegynder
15. april 2001 - 21:15 #11
For flueknepperiets skyld, så er rand() funktionen hverken særlig hurtig eller særlig \"tilfældig\".

Brug mt_rand() istedet og dens tilhørende \"seed\" funktion (kan ikke lige huske hvad den hedder)
Avatar billede mortenfn Nybegynder
15. april 2001 - 21:18 #12
vi har for noget tid siden lavet test på rand og mt_rand.

mt_rand er lidt hurtigere og rand lidt mere tilfældig - men \"ingen\" forskeld.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester