Tạo mật khẩu ngẫu nghiên trong php

Một đặc điểm chung được tìm thấy trên nhiều trang web là việc đăng kí người dùng với mật khẩu ngẫu nhiên. Bài viết này sẽ hướng dẫn bạn việc sinh ra một mật khẩu ngẫu nhiên với độ dài được chỉ định thông qua một đoạn mã.

Chúng ta sẽ tạo một hàm PHP để sinh mã. Tôi sẽ không nói chi tiết về các hàm ở đây, vì vậy tôi sẽ coi như là bạn đã biết nó làm gì, như thế nào và tại sao chúng được dùng. Thật đơn giản, sử dụng hàm để thực hiện công việc, ban có thể sử dụng nó bất cứ ở đâu trong ứng dụng của bạn, mà không cần thiết phải viết lại code. Tôi sẽ coi như bạn đã biết nơi đặt hàm (hoặc bạn có sở thích khác về chỗ mà bạn định đặt hàm mà bạn sửa dụng). Bạn cần nghiên cứu kỹ hàm một cách chi tiết hơn trước khi tiếp tục.


function randomPassword($length,$allow
= "abcdefghijklmnopqrstuvwxyz0123456789") {

Theo như đoạn code này thì chúng ta vừa đặt tên cho hàm của chúng ta là randomPassword. Tất nhiên bạn có thể đặt tên nó tùy theo ý thích liên quan đến mục đích của bạn và nhớ thay đổi tất cả các tham chiếu đến nó trong đoạn code của bạn! Hàm nay có 2 tham số là $length và $allow. Tham số $length đơn giản là độ dài của mật khẩu mà bạn muốn tạo ra. Tham số $allow là một tùy chọn không bắt buộc. Đây là một tập hợp các kí tự mà mật khẩu của bạn được lấy ra từ đó. Mặc định chúng ta đặt nó được sinh ra từ các chữ cái thường và các số từ 0 đến 9.

$i = 1;
while ($i <= $length) {

Tiếp theo chúng ta sẽ tao một vòng lặp, vòng lặp này có số lần chính là độ dài của mật khẩu mà bạn đặt. Do đó trong vòng lặp chúng ta sẽ sinh ra ngẫu nhiên một kí từ và thêm nó vào vị trí cuối cùng của mật khẩu sinh ra ngẫu nhiên...

$max = strlen($allow)-1; 
$num = rand(0, $max);

Đoạn code trên sinh ra ngẫu nhiên một số giữa 0 và số kí tự được truyền vào qua biến $allow trừ đi 1. Vì vậy nếu có 20 kí tự và một số ngãu nhiên được sinh ra giữa 0 và 19. Điều này là vì hàm substr() được sử dụng trong đoạn code dưới đây tham chiếu đến kí tự đầu tiên của chuỗi là 0 chứ không phải là 1.

$temp = substr($allow, $num, 1); 
$ret = $ret . $temp;

Một kí tự được chọn ngẫu nhiên từ tham số $allow bằng việc sử dụng hàm substr(). Kí tự này sau đó được thêm vào biến $ret variable và nó sẽ là mật khẩu ngẫu nhiên của chúng ta.

$i++;
}
return $ret;
}

Đoạn code trên kết thúc vòng lặp và trả về mật khẩu được sinh ra. Pretty basic stuff to be honest. Hàm của chúng ta bây giờ đã hoàn thành! Tất cả công việc còn lại là gọi hàm trong đoạn code của bạn để sinh ra mật khẩu tại nơi mà chúng ta muốn. Điều này được thực hiện một cách đơn giản:

$password = randomPassword(10);

Ví dụ trên sẽ sinh ra một mật khẩu ngẫu nhiên với độ dài là 10 kí tự. Và đây là một ví dụ khác.

$password = randomPassword(10, '0123456789');

Ví dụ này lại sinh ra một mật khẩu ngẫu nhiên gồm 10 kí tự và chỉ toàn chữ số.

Chúng ta hãy cùng xem lại đầy đủ hàm mà chúng ta vừa tạo ra.


function randomPassword($length, $allow = "abcdefghijklmnopqrstuvwxyz0123456789") {

$i = 1;
while ($i <= $length) {

$max = strlen($allow)-1;
$num = rand(0, $max);
$temp = substr($allow, $num, 1);
$ret = $ret . $temp;
$i++;
}
return $ret;

}

Thực ra với cách tạo pass random nói trên chỉ có ý nghĩa với các admin thực sự "bận rộn". Tất cả các function viết ra chỉ khởi tạo password cho thành viên, nó không hề được mã hóa và cực kỳ nguy hiểm. Nếu chỉ tạo pass random thì đoạn code sau làm ngắn gọn hơn thế.

<?php

/**
* The letter l (lowercase L) and the number 1
* have been removed, as they can be mistaken
* for each other.
*/

function createRandomPassword() {

$chars = "abcdefghijkmnopqrstuvwxyz023456789";
srand((double)microtime()*1000000);
$i = 0;
$pass = '' ;

while ($i <= 7) {
$num = rand() % 33;
$tmp = substr($chars, $num, 1);
$pass = $pass . $tmp;
$i++;
}

return $pass;

}

// Usage
$password = createRandomPassword();
echo "Your random password is: $password";

?>

Cách khác:

<?php

function generatePassword($length=9, $strength=0) {
$vowels = 'aeuy';
$consonants = 'bdghjmnpqrstvz';
if ($strength & 1) {
$consonants .= 'BDGHJLMNPQRSTVWXZ';
}
if ($strength & 2) {
$vowels .= "AEUY";
}
if ($strength & 4) {
$consonants .= '23456789';
}
if ($strength & 8) {
$consonants .= '@#$%';
}

$password = '';
$alt = time() % 2;
for ($i = 0; $i < $length; $i++) {
if ($alt == 1) {
$password .= $consonants[(rand() % strlen($consonants))];
$alt = 0;
} else {
$password .= $vowels[(rand() % strlen($vowels))];
$alt = 1;
}
}
return $password;
}

?>

Chúc các bạn thành công!

Đăng nhận xét