ホームページ > php教程 > php手册 > PHPでランダムなパスワードを生成する方法のまとめ

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

WBOY
リリース: 2016-06-21 08:49:04
オリジナル
878 人が閲覧しました

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

方法 1:

1. 33 ~ 126 のランダムな整数 (35 など) を生成します。
2. 35 を対応する ASCII 文字に変換します (#
に対応する 35 など)。 3. 上記の手順 1 と 2 を n 回繰り返して、n 桁のパスワードに接続します

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

function create_password($pw_length=8){
    $randpwd='';
    for($i=0;$i<$pw_length;$i++){
        $randpwd.=chr(mt_rand(33,126));
    }
    return $randpwd;
}
ログイン後にコピー

使用方法は次のとおりです。ここでは、長さ 6 のランダムなパスワードが生成されます。

echo create_password(6);
ログイン後にコピー

方法 2:

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

2. $chars 文字列から文字 をランダムに選択します 3. 2 番目のステップを n 回繰り返して、長さ n のパスワードを取得します

function generate_password($length=8){
    // 密码字符集,可任意添加你需要的字符
    $chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?';
    $password='';
    for($i=0;$i<$length;$i++){
        // 这里提供两种字符获取方式
        // 第一种是使用 substr 截取$chars中的任意一位字符;
        // 第二种是取字符数组 $chars 的任意元素
        // $password.=substr($chars,mt_rand(0,strlen($chars)-1),1);
        $password.=$chars[mt_rand(0,strlen($chars)-1)];
    }
    return $password;
}
ログイン後にコピー

方法 3:

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

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=array_rand($chars,$length);
    $password='';
    for($i=0;$i<$length;$i++){
        // 将 $length 个数组元素连接成字符串
        $password.=$chars[$keys[$i]];
    }
    return $password;
}
ログイン後にコピー

方法 4:

1. time() は現在の Unix タイムスタンプを取得します

2. 最初のステップで取得したタイムスタンプを md5() で暗号化します 3. 2 番目のステップの暗号化結果を使用し、n 桁を傍受して目的のパスワード

を取得します。

function get_password($length=8){
    $str=substr(md5(time()),0,6);
    return $str;
}
ログイン後にコピー

時間効率の比較

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

<?php
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 seconds";
?>
ログイン後にコピー
プログラムの実行時間をテストする上記の方法については、このサイトの記事も参照できます:

プログラムの実行時間を計算するための PHP クラス

最終結果は次のとおりです:

方法 1: 9.8943710327148E-5 秒

方法 2: 9.6797943115234E-5 秒 方法 3: 0.00017499923706055 秒
方法 4: 3.4093856811523E-5 秒

まとめると、方法 1 と方法 2 の実行時間はほぼ同じであり、方法 4 の実行時間は最も短く、方法 3 の実行時間はわずかに長いことがわかります。



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート