はじめに
Laravelでユーザー登録の際にランダムな初期パスワードをデータベースに保存し、その初期パスワードをユーザーにメールで通知するという場合があるかと思います。
その際に、ランダムなパスワードを生成する際にどうすればいいかを調べると、Str::randomメソッドが出てきたため、それを使えばいいかと思いました。
パスワードの条件としては、アルファベットの大文字と小文字と数字を少なくとも1文字は含み、8文字というものです。
Str::randomメソッドでコードを書いて、プルリクを出すと、上記のパスワードの条件を満たさないととことだったので、本当にそうか?と思い調べました。
Str::randomメソッドとは
Str::randomメソッドは指定した長さのランダムな文字列を生成します。このメソッドは、PHPのrandom_bytes関数を使用します。
生成されるランダム文字列には
大文字
小文字
数
が含まれています。
検証
Str::randomメソッドを用いて、何度かランダムなパスワードを生成したみる。
3文字のランダムなパスワードを生成し、生成したパスワード全てに大文字・小文字・数が1文字ずつ含まれているかどうか。
結果
1回目から、5PH ...
初回からダメでした。
文字数が大きくなると、問題ないかもしれないですが、確実に大丈夫というわけではないので使わない方がいいですね。