Edited at

ランダムなパスワードを1行で生成する

More than 1 year has passed since last update.

ランダムなパスワードや文字列を生成する方法を6つ紹介します。


1. str_shuffle() を使う


  • 同じ文字が2回出ない

  • 36文字まで生成可能

<?php

function random($length = 8)
{
return substr(str_shuffle('1234567890abcdefghijklmnopqrstuvwxyz'), 0, $length);
}


2. mt_rand() を使う


  • 同じ文字が複数回でる可能性がある

  • 12文字まで生成可能

<?php

function random($length = 8)
{
return base_convert(mt_rand(pow(36, $length - 1), pow(36, $length) - 1), 10, 36);
}


3. md5(uniqid()) を使う


  • 同じ文字が複数回でる可能性がある

  • 25文字まで生成可能

<?php

function random($length = 8)
{
return substr(base_convert(md5(uniqid()), 16, 36), 0, $length);
}

sha256にすることで48文字まで生成可能になる

<?php

function random($length = 8)
{
return substr(base_convert(hash('sha256', uniqid()), 16, 36), 0, $length);
}


4. array_reduce() を使う


  • 同じ文字が複数回でる可能性がある

  • 何文字でも生成可能

<?php

function random($length = 8)
{
return array_reduce(range(1, $length), function($p){ return $p.str_shuffle('1234567890abcdefghijklmnopqrstuvwxyz')[0]; });
}


5. opensslを使う

PHP - ランダムなパスワードを1行で生成する with openssl - Qiita


6. str_repeat + str_shuffle


  • 同じ文字が複数回でる可能性がある

  • 何文字でも生成可能

<?php

function random($length = 8)
{
return substr(str_shuffle(str_repeat('0123456789abcdefghijklmnopqrstuvwxyz', $length)), 0, $length);
}

参考: [PHP] 一行でランダムパスワードを得る方法 : してログ - LANDHERE


7. random_bytes


  • PHP7で追加された暗号学的に安全なランダムバイト生成するrandom_bytes関数を使う。

  • 同じ文字が複数回でる可能性がある

  • 出現する文字は0-9, a-fのみ

  • なん文字でも生成可能

function random($length = 8)

{
return substr(bin2hex(random_bytes($length)), 0, $length);
}