アカウント管理系のソフトを作っているとパスワードの自動生成が必要になることがあります。そんなときにあると便利なのが、パスワード生成ロジックです。
今回は使える文字列を引数で指定できるパスワード生成メソッドをご紹介します。
ソースコード
なにはともあれソースコードです。
インターフェース
使う文字列が既定の半角英数字でよければ、引数はパスワードの長さを指定する length
だけで足ります。
var pass = GenerateRandomPassword(16);
Console.WriteLine(pass); // will show a 16-length password
文字種を指定したければ第2引数に渡すだけです。たとえば、見分けのつきにくい 0
と O
, o
や 1
と l
などを除いた文字セットを渡すと、残された文字だけでパスワードを生成します。
const string DISTINCT_CHARS = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
var pass = GenerateRandomPassword(16, DISTINCT_CHARS);
Console.WriteLine(pass); // will show a 16-length password w/o "0", "O", "o", "1" and "l"
ユーザーの設定に応じた任意文字種のパスワード生成ができますね。
逆に任意の記号を追加すれば、記号も含まれるようになります。(ただし、「必ず」記号を含むようにしたい場合はもう少し工夫が必要です。)
仕組み
難しいところはありませんが、基本的には Random
クラスの Next
メソッドで文字種配列の長さ未満の乱数を発生させ、ランダムに配列の要素を選択させているだけです。
やり方はいろいろありますが、ここでは、Enumerable.Range
で指定長さの整数配列を生成し、その要素ごとに Select
で文字を取得して、最後に string.Join
で一つの文字列に結合して返しています。
コピペで使えるロジックとして参考にしていただければ幸いです。