メルセンヌ・ツイスタというランダム生成アルゴリズムを使用したパスワードジェネレーターを作成しました。このアプリを使うとランダムなパスワードを生成できます。
メルセンヌ・ツイスタとは?
メルセンヌ・ツイスタは高速で良質な擬似乱数列生成器を生成できるアルゴリズムで、最近のC++にも組み込まれています。実は考案者のひとり松本眞先生は、私の大学時代の恩師です。
詳しくは、Wikipediaをご参照ください。
https://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%AB%E3%82%BB%E3%83%B3%E3%83%8C%E3%83%BB%E3%83%84%E3%82%A4%E3%82%B9%E3%82%BF
パスワードジェネレーターの使い方
プログラムを起動すると上記のような画面が表示されます。生成するパスワードの文字数、使用文字(大文字、小文字、数字、記号)、生成個数を入力して、「生成」ボタンをクリックすると、画面下部に生成されたパスワードが表示されます。
ダウンロード
Microsoft ストアに公開していますので、Windows 10以降の方は下記からダウンロード&インストールできます。
https://www.microsoft.com/store/productId/9NBLGGH35DBF
実行ファイル自体をダウンロードしたい場合は、下記で公開しています。
Releases · kenjinote/PasswordGenerator (github.com)
※ページ内のzipファイルをダウンロードしてください。
ソースコード
ソースコードは下記で公開しています。
ライセンスは、MITライセンスです。自由に改変してお使いいただけます。
改変履歴
・メルセンヌ・ツイスタの出力値をそのまま使用していましたが、暗号学的に安全でないとのご指摘をいただきましました。メルセンヌ・ツイスタの出力値をそのまま使うのではなく、SHA-512ハッシュ関数でハッシュ値を計算し、その結果を数値変換するように修正しました。
・GetTickCount 関数の戻り値をシードとして設定していましたが、この方法はあまり良い方法ではないとご指摘をいただきました。std::random_deviceとstd::seed_seqを使ってシード列を生成する方法に修正しました。
@kenjinote もう一つ、乱数生成器の初期化にGetTickCountを使っているのが良くなくて、std::random_deviceとstd::seed_seqをつかって十分なエントロピーのシード値で初期化したほうが良いです。
— そすう (@_primenumber) 2016年9月13日
ご指摘ありがとうございました。他なにかお気づきの点がございましたらコメントいただければと思います。