ホームページ  >  記事  >  バックエンド開発  >  PHPでランダムなパスワードを生成する方法

PHPでランダムなパスワードを生成する方法

巴扎黑
巴扎黑オリジナル
2016-12-01 10:59:351134ブラウズ

PHP を使用してアプリケーション、特に Web サイトのプログラムを開発すると、多くの場合、ランダムなパスワードを生成する必要があります。たとえば、ユーザー登録用にランダムなパスワードが生成され、ユーザーのリセット用のパスワードにもランダムなパスワードが必要になります。ランダムなパスワードは固定長の文字列です。ここでは、参考のためにランダムな文字列を生成するいくつかの方法を集めました。

方法 1:

1. 35、

2 などの 33 ~ 126 のランダムな整数を生成します。#

3 に対応する 35 などの対応する ASCII 文字に変換します。 n 回、n 桁のパスワードに連結します

このアルゴリズムは主に 2 つの関数を使用します。mt_rand (int $min, int $max) 関数は、$min – $max が ASCII コードの範囲であるランダムな整数を生成するために使用されます。ここでは 33 ~ 126 を選択し、必要に応じて範囲を調整できます。たとえば、ASCII コード テーブルの 97 ~ 122 ビットは英語の文字 a ~ z に対応します。詳細については、ASCII コード テーブルを参照してください。 int $ascii) 関数は、対応する整数 $ascii を対応する文字に変換するために使用されます。

function create_password($pw_length = 8)
{
$randpwd = '';
for ($i = 0; $i {
$randpwd .= chr(mt_rand(33, 126));
}
Return $randpwd;
}

// この関数を呼び出し、長さパラメータを渡します $pw_length = 6
echo create_password(6);


方法 2:

1. 文字をプリセットします。文字列 $chars には、a – z、A – Z、0 – 9、およびいくつかの特殊文字

2 が含まれます。$chars 文字列内の文字をランダムに選択します

3 2 番目のステップを n 回繰り返し、取得される長さは n になります。パスワード

function generated_pa​​ssword( $length = 8 ) {
// パスワード文字セット、必要な文字を追加できます
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{} < >~`+=,.;:/?|';

$password = '';
for ( $i = 0; $i {
// ここで提供 2 つの方法文字を取得する
// 最初の方法は、substr を使用して $chars 内の文字をインターセプトすることです。 , mt_rand(0, strlen($chars) - 1), 1);
$password .= $chars[ mt_rand(0 , strlen($chars) - 1) ];
}

return $password;

}

方法 3:

1. a – z、A – を含む文字配列 $chars をプリセットします。 Z、0 – 9、および一部の特殊文字


2. array_rand() を使用して配列から $chars から $length 要素をランダムに選択します

3. 取得したキー名配列 $keys に従って、配列から文字を取り出します$chars と文字列を連結します。この方法の欠点は、同じ文字が繰り返し取得されないことです。

function make_password( $length = 8 )

{

// パスワード文字セット、必要な文字を追加できます

$chars = array('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'、'!'、

'@'、'#'、'$ '、'%'、'^'、'&'、'*'、'('、')'、'-'、'_'、
'['、']'、'{'、'}' 、'<'、'>'、'~'、'`'、'+'、'='、','、
'.'、';'、':'、'/'、'? ', '|');

// $chars 内の $length 配列要素のキー名をランダムに選択します
$keys = ($chars, $length);

$password = '';
for($i = 0; $i < $length; $i++)
{
" // $length の配列要素を文字列に連結します
" $password .= $chars[$keys [$i]];
}

return $password;
}


時間効率の比較

次の PHP コードを使用して、6 桁のパスワードを生成するための上記 3 つのランダム パスワード生成関数の実行時間を計算します。 , そして比較してみましょう 時間効率の簡単な比較。

function getmicrotime()
{
list($usec, $sec) =explode(" ",microtime());
return ((float)$usec + (float)$sec);
}

// 記録開始時刻
$time_start = getmicrotime();

// 以下のような、実行する PHP コードをここに記述します。
// echo create_password(6)

// 記録終了時刻
$ time_end = getmicrotime();
$time = $time_end - $time_start;

// 合計実行時間を出力します
echo "実行時間 $time 秒";
?>


最終結果は次のようになります:

メソッド1 : 9.8943710327148E-5 秒

方法 2: 9.6797943115234E-5 秒

方法 3: 0.00017499923706055 秒

方法 1 と方法 2 の実行時間は類似しているのに対し、方法 3 の実行時間は同じであることがわかります。は少し長めです。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。