C++ で強力なパスワードを作成したいと考えています。助言がありますか?
アルファベット(大文字と小文字)、数字、特殊文字を使用する必要があると思います。
最小の長さを指定できるとよいでしょう。
「お」や「お」など、視覚的に判別しにくい文字は避けた方が良いでしょう。
すべての同じ文字、辞書の単語、反転した単語、名前を無効にすることは素晴らしいことです。
他のヒントはありますか?このようなコードはどこにありますか?
いくつかの方法があります。簡単が必ずしも最善とは限らない
定義したいすべての文字を表す文字列を作成し (つまり、O や 0 などはありません)、ランダムな長さの文字列にそのセットのランダムな文字を入力します。
次のステップは、すべてのアサーションに合格するまで生成を続けることです。つまり、辞書の単語、逆名などをチェックします。
生成に予想よりも時間がかかる場合がありますが、それでも気付くよりは速いはずです。
APG(Automated Password Generator)は、最後の要件を除くすべてを実装します(辞書の単語/ユーザー名/繰り返し文字はありません)。これには、発音可能なパスワード生成アルゴリズムと完全にランダムなパスワード生成アルゴリズムの両方が含まれています。発音可能なパスワードは次のようになります。
yevGaijra クリシャホップ jewnAms8 RacMevOm Duheamch& raicsant〜
これはCで書かれており、BSDのようなライセンスの下で利用できます。
暗号的に言えば、あなたの最後の要件が有効かどうかはわかりません...?パスワードの生成が本当にランダムである場合、のパスワードはのパスワードaaaaaaaa
と同じである可能性が高く6-n&1jIK
、攻撃者がアルゴリズムを知っている場合は、のようなパスワードを禁止するaaaaaaaa
ことで、攻撃者の検索スペースを減らします。
OpenSSLのランダムジェネレーターを使用して、base64でエンコードすることができます。(あらゆる種類のランダムな文字を取得するわけではありませんが、多くの文字を取得します。)残念ながら、同様の文字のパスワードビットも実行されません。私のお気に入りのジェネレーターはここにあり、あなたが話している機能を提供します。(Webのみ、悲しいことに)
FIPS 181など、いくつかのソースが使用する要件が文書化されています。
人気のある自動パスワードジェネレータユーティリティのドキュメントを参照することをお勧めします。それが提供するオプションと機能を見ると、大いに役立つ可能性があります。
また、生成されたパスワードをチェックして、アプリケーションのしきい値を満たしていることを確認してください。
ウィキペディアには、いくつかの既存の設計と標準もリストされています。
TRNGデバイスといくつかのよく知られているアルゴリズムを試すことができます。これが最善の方法です ;)