PHP でパスワードを生成する

Subodh Poudel 2023年1月30日
  1. rand() 関数を使用してランダム配列インデックスを選択し、PHP でランダムパスワードを生成する
  2. PHP で openssl_random_pseudo_bytes() および bin2hex() 関数を使用してランダムパスワードを生成する
  3. PHP で substr() および str_shuffle() 関数を使用して指定された英数字の文字列からランダムパスワードを生成する
PHP でパスワードを生成する

rand() 関数を使用して PHP でランダムなパスワードを生成する方法を紹介します。この方法では、小文字と大文字のアルファベットと数字の組み合わせを使用してパスワードを作成します。rand() 関数は、パスワードの組み合わせを選択するために、配列インデックスであるランダムな整数を返します。

また、openssl_random_pseudo_bytes() および bin2hex() 関数を使用して PHP でランダムパスワードを生成する別の方法を紹介します。

この記事では、substr() 関数と str_shuffle() 関数を使用して PHP でランダムなパスワードを生成する別の方法を示します。このメソッドは、プログラムで提供される英数字値を使用して、ランダムなパスワードを形成します。

rand() 関数を使用してランダム配列インデックスを選択し、PHP でランダムパスワードを生成する

rand() 関数を使用して、PHP でランダムパスワードを生成できます。rand() 関数は、指定されたパラメーターの範囲からランダムな整数を返します。この関数は、パラメーターとして 2つの整数値を取ります。パスワードを組み合わせることができるアルファベットと数字の文字列を定義できます。乱数は、ランダムなアルファベットまたは数字を選択するために配列にインデックスを付けます。rand() 関数をループして、必要な長さのパスワードを作成できます。

たとえば、変数 $comb を作成し、すべての小文字と大文字のアルファベットと 0 から 10 までの数字を含む文字列を abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 として格納します。array() 関数を使用して配列 $pass を作成します。文字列 $comb の長さを $combLen 変数に格納します。for ループを作成し、ループを 8 回繰り返します。ループ内で、0$ commbLen 変数をパラメーターとして使用して rand() 関数を使用し、値を $n 変数に格納します。次に、$ commb [$ n]$pass 配列に割り当てます。ループの外側で、implode() 関数を使用して配列を文字列に変換します。

以下の例では、$comb 変数に格納されている組み合わせからランダムなパスワードを生成します。rand() 関数は、0 から文字列 $comb の長さまでのランダムな整数を取得します。ランダムな整数は、組み合わせからランダムな英数字の値を取得するためのインデックスとして使用されます。ループは 8 回実行され、8つのランダムな英数字値を選択し、最後にランダムなパスワードを形成します。rand() 関数の詳細については、PHP マニュアルを確認してください。

サンプルコード:

# php 7.x
<?php
 $comb = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
 $pass = array(); 
 $combLen = strlen($comb) - 1; 
 for ($i = 0; $i < 8; $i++) {
     $n = rand(0, $combLen);
     $pass[] = $comb[$n];
 }
 print(implode($pass)); 
?>

出力:

aPsQWlzh

PHP で openssl_random_pseudo_bytes() および bin2hex() 関数を使用してランダムパスワードを生成する

openssl_random_pseudo_bytes() 関数を使用して、疑似ランダムなバイト文字列を生成できます。関数のパラメーターとして整数値を指定して、生成する必要のバイト数の長さを定義できます。bin2hex() 関数は、バイナリデータを 16 進表現に変換します。この関数を使用して、ランダムに生成されたバイト文字列を 16 進表現に変換し、パスワードを作成できます。このメソッドは、英数字の値で構成されるランダムパスワードを生成します。

たとえば、変数 $bytes を作成し、それを関数 openssl_random_pseudo_bytes() で割り当てます。関数のパラメーターとして 4 を指定します。別の変数 $pass を作成し、それに関数 bin2hex() を記述します。関数で $bytes 変数を指定します。echo ステートメントを使用して $pass 変数を出力します。

以下の例では、openssl_random_pseudo_bytes() 関数の 4 は、ランダムに生成されるバイト数を示しています。bin2hex() 関数は、バイトを 16 進数に相当するものに変換します。ランダムに生成されたパスワードの長さは 8 です。これは、4 バイトの文字列を 16 進変換すると 8 になるためです。bin2hex() 関数の詳細については、PHP マニュアルを確認してください。

サンプルコード:

#php 7.x
<?php
$bytes = openssl_random_pseudo_bytes(4);
$pass = bin2hex($bytes);
echo $pass;
?>

出力:

ed203eef

PHP で substr() および str_shuffle() 関数を使用して指定された英数字の文字列からランダムパスワードを生成する

str_shuffle() メソッドを使用して、指定された文字列をランダムにシャッフルできます。この関数は、小文字と大文字のアルファベットの組み合わせの文字列を 0 から 9 までの数字とともにシャッフルします。したがって、考えられるすべての大文字小文字の 1つの順列を形成します。シャッフルされた文字列に対して substr() 関数を使用して、その文字の一部を選択できます。したがって、ランダムなパスワードを生成できます。

たとえば、変数 $comb を作成し、その中に文字列値 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 を格納します。str_shuffle() を使用して $ commb 変数をシャッフルし、$shfl 変数に格納します。次に、substr() 関数と $shfl 変数、0、および 8 をパラメーターとして使用します。関数を $pwd 変数に格納し、変数を出力します。

以下の例では、最初の方法と同じ英数字のセットを使用しています。ランダムに生成されたパスワードは、これらの英数字の値から形成されます。str_shuffle() 関数は英数字値をシャッフルし、ランダム順列を作成します。substr() 関数で 08 を使用して、シャッフルされた順列の最初のインデックスから 8 文字を選択しました。したがって、8 桁のランダムパスワードを生成します。

コード例:

#php 7.x
<?php
$comb = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$shfl = str_shuffle($comb);
$pwd = substr($shfl,0,8);
echo $pwd;
?>

出力:

jenZq3lY
著者: Subodh Poudel
Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn

関連記事 - PHP Password