LoginSignup
210

More than 3 years have passed since last update.

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

Last updated at Posted at 2012-12-26

ランダムなパスワードや文字列を生成する方法を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);
}

最後までお読みくださりありがとうございました。Twitterでは、Qiitaに書かない技術ネタなどもツイートしているので、よかったらフォローお願いします:relieved:Twitter@suin

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
210