BAZA WIEDZY
KURSY
Bazy danych w PHP
Kurs AdvancedAJAX
Kurs ASP
Kurs ASP.NET
Kurs C++
Kurs CSS
Kurs HTML
Kurs HTML drugi
Kurs JavaScript
Kurs MySQL
Kurs PHP
Kurs RSS
Kurs XHTML
Obiekty DOM
MANUALE
CSS1 - W3C
DOM - w budowie
PHP 2005
PHP 2006
Wyrażenia regularne
SHOUTBOX
STAT
Online: 27 | UU: 424
[PHP] Jak wygenerować losowe hasło?
3 kwiecień 2007

W tej poradzie opisane zostanie jak w prosty sposób wygenerować hasło o długości od 1 do 32 znaków.

Przykład:

Kod: php

<?php
function random_string($length){
  $string = md5(time());
  $string = substr($string,0,$length);
  return($string);
}
?>

Teraz wytłumaczę. Zaczynamy od zdefiniowania funkcji.

Kod: php

<?php
function random_string($dlugosc){

}
?>

Funkcja random_string() pobiera jako parametr zmienną $dlugosc. Długość ta może być różna, pomiędzy 0 a 32 znaki. Nawet jeśli damy jako argument ciąg dłuższy niż 32 znaki, funkcja zwróci tylko 32.

Kod: php

<?php
  $string = md5(time());
?>

Teraz generujemy losowy ciąg znaków. Pobieramy obecny czas używając funkcji time(). Następnie stodujemy funkcję md5() do wygenerowania 32 znakowego ciągu znakow.

Zmienna $string przyjmuje przykładowo taką wartość:
9c17232bde9882a2dbaacca27acdffcf

Teraz podamy jaką długość ma mieć nasze hasło:

Kod: php

<?php
$string = substr($string,0,$dlugosc);
?>

W tym miejscu określamy wymaganą długość zmiennej $string używając funkcji substr(). Funkcja ta zwraca część ciągu znaków rozpoczynając od znaku podanego jako jej argument. W naszym przypadku zaczyna od pierwszego znaku określonego cyfrą 0.

Na koniec zwracamy wartość zmiennej $string z funkcji.

Kod: php

<?php
echo random_string(15);
  // albo
$los = random_string(15);
echo $los;
?>

To dość nieskomplikowany przykład, jednak bezpieczeństwo hasła jest w miarę duże. Możemy kontrolować jego długość w zależności do jakich potrzeb jest nam potrzebne.

Opracowanie: Adam Suchowski

Dodaj komentarz









Komentarze
7 odpowiedzi
adam
22 grudzień 2007, godz. 4:20

Fakt - coś mi się pomyliło

adamt
22 grudzień 2007, godz. 1:24

a może lepiej microtime() ?? :)

niewierny
21 grudzień 2007, godz. 7:40

Mój drogi Adamie … jeżeli time() (w php) zwracał by czas w milisekundach (jak to napisałeś) to pewnie bym nic nie pisał … ale niestety time() to jest czas w sekundach … tak więc w ciągu jednej sekundy serwer zwróci kilka (w zależności od prędkości wykonywania obliczeń) takich samych wartości dla time …

adam
20 grudzień 2007, godz. 4:17

niewierny, nie wiem czy zauważyłeś, że hasło generuje md5 na podstawie stringa z funkcji time czyli niepowtarzającego się nigdy ciągu znaków. Zatem hipotetycznie podstawiając pod md5 niepowtarzalny string powinniśmy otrzymać zawsze inny wynik. Może się mylę :) Rozumiem o co mogło chodzić. Jeżeli funkcję zapniemy do pętli to serwer będzie wykonywał ją tak szybko, że w ramach jednej milisekundy md5 będzie wykorzystywał ten sam czas time() i zwróci kilka takich samych wyników w zależności od jego sprawności. Wydaję mi się, że można wprowadzić do funkcji opóźnienie w wykonywaniu pętli i będzie ok.

niewierny
20 grudzień 2007, godz. 3:38

A tak z ciekawości … jak ma się słowo “losowy” do tego co zostało tutaj wygenerowane … już wyjaśniam - proszę odpalić tą funkcję w pętli … i każdy zobaczy, że w zależności od prędkości serwera, będzie miał kilka razy wygenerowane to samo “losowe” hasło …
Nie prościej zrobić sobie w pętli chr(rand(0,255)) … wtedy to też będzie powtarzalne, ale już nie z taką częstotliwością …

Dodam jeszcze, że w “konwencjonalnych” komputerach nie ma takiego jpojęcia jak losowo … jest pseudolosowo a to nie to samo

Syf
14 listopad 2007, godz. 6:52

A co z funkcją unuqid()?

Przydałoby się dodać :)

29 październik 2007, godz. 7:27

bardzo fajny tutorial, tego szukałem thx

 
 
Copyright © 2006-2011 egrafik.pl | Kontakt | Reklama | Projekty domów
jocker