LoginSignup
1
3

More than 3 years have passed since last update.

【PHP】単語を組み合わせたランダムなパスワードの生成

Last updated at Posted at 2019-09-19

はじめに

ここでは、PHPを使ったランダムな文字列のパスワードを生成し、ファイルに生成したパスワード保存するプログラムを作っていきます。
すでにパスワード生成に関しては色んな方が記事を出してます。しかしエンジニア歴が浅く、かつPHP触った事ない私にとっては少々わかりづらかったので、そんな方にもわかりやすく向けた解説付きの記事となります。

少しでも参考になれば嬉しいです:relaxed:

目的

パスワード変更の際、毎回毎回どんなパスワードにしようか考えていては疲れてしまいます。定期的なパスワード変更を実施している場合などは特にそうです。なのでPHPで人間が頭を使う部分を自動化させようというのが目的です。
パスワードの定期的な変更は賛否ございますが、パスワードを知っている職員が退職し、情報漏洩防止の為にパスワードの変更を余儀なくされるケースはあるかと思います。そんなシーンを想定しています。

なぜ、規則性のない英数字ではなく単語なのか。という点に関しては、
・その方がパスワードを覚えやすい。
・入力もしやすい。
・人に伝えやすい。
という理由です。

単語じゃなくていいという方は、こちらの記事→ランダムなパスワードを1行で生成するが参考になります。

完成品

random_password.php
<?php
function password()
/* パスワード生成 */
{
  $word = array('fire', 'dragon', 'magic');
  $keys = array_rand($word, 3);
  shuffle($keys);
  $pws = "";
  foreach ($keys as $key) {
    $pws = $pws.$word[$key];
  }
  return $pws;
}
file_put_contents("sample.csv", password());
?>

こちらです。
サンプルコードの為、配列の中に単語を3つしか用意していませんがもっと入れておくといいと思います。

解説

まずはphpファイルを作って、それの中にphpタグ<?php ?>を作りましょう。
このタグの中に書いていけば、phpを書いたことになります。

random_password.php
<?php
function password()
/* パスワード生成 */

パスワード生成をする関数を作成します。function password() {}とすることで、password()で関数を実行できます。

random_password.php
<?php
function password()
/* パスワード生成 */
{
  $word = array('fire', 'dragon', 'magic');

phpでは$で変数を定義します。なのでここでは$wordに配列が与えられ、その配列の中にはパスワードに使用する単語が入っています。

random_password.php
<?php
function password()
/* パスワード生成 */
{
  $word = array('fire', 'dragon', 'magic');
  $keys = array_rand($word, 3);
  shuffle($keys);

$keys = array_rand($word, 3);では、配列$wordの中から3つの単語をランダムに抜き出して、変数$keysと定義しています。

shuffle($keys);では、$keysが持っている3つの単語の順番をランダムに入れ替えている、文字通りシャッフルをしています。

random_password.php
<?php
function password()
/* パスワード生成 */
{
  $word = array('fire', 'dragon', 'magic');
  $keys = array_rand($word, 3);
  shuffle($keys);
  $pws = "";
  foreach ($keys as $key) {
    $pws = $pws.$word[$key];
  }
  return $pws;
}

最終的にreturnで生成した文字列を返したいので、$pws = "";を定義しています。現在$pwsの中身は空ですが、ここに生成したパスワードを入れていきます。

foreach配列専用のforです。使い方はforと同じです。
array_rand($word, 3);で抜き出した単語の数だけforeachが回るので、それを$pwsの中に足していきます。

$pws = $pws.$word[$key];とすることで、

fire
firedragon
firedragonmagic

のようになります。

return $pws;で先ほどのfiredragonmagicを返り値としています。

random_password.php
<?php
function password()
/* パスワード生成 */
{
  $word = array('fire', 'dragon', 'magic');
  $keys = array_rand($word, 3);
  shuffle($keys);
  $pws = "";
  foreach ($keys as $key) {
    $pws = $pws.$word[$key];
  }
  return $pws;
}
file_put_contents("sample.csv", password());
?>

file_put_contents("sample.csv", password());とすることで、sample.csvファイルを新規作成、そのファイルの中にpassword()で返ってくる値が書き込まれます。すでにsample.csvが存在する場合は、上書きとなります。

さいごに

ここまで読んでくださってありがとうございました。
誤字脱字・発信した情報に間違い等ございましたら、指摘して頂けますと幸いです:bow:
また、説明にわかりづらい点がございましたら、改善致しますのでぜひコメントください:pray:

1
3
0

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
1
3