-1

条件 : パスワードは、大文字と小文字、数字、および特殊文字のうち少なくとも 2 つを組み合わせた 8 文字以上である必要があります。

条件に合うパターンは?

4

2 に答える 2

6

正規表現は、これに対する完全に間違ったアプローチです。代わりに、各文字タイプの出現回数を数え、if ステートメントとブール論理を使用して、要件が満たされているかどうかを確認します。

ただし、やりたいことが良いアイデアかどうかを再考してください。

  • シンボルを制限することは、ひどく悪い考えです。任意の文字を許可する必要があります
  • パスワードに特定の長さがある場合、たとえば記号/数字/大文字と小文字の混合を要求すると、その目的の多くが失われます。さらに、攻撃者は、一部のユーザーがパスワードに小文字のみを使用しているのか数字のみを使用しているのかを知ることができないため、それらの文字のみを使用するようにブルート フォース攻撃を調整することはできません。とにかく良いオプション。
  • 有名なxkcdの「正しい馬のバッテリー ステープル」を想像してみてください。これらの単語はすべて辞書に載っており、不適切に実装されたパスワード チェックに失敗することさえありますが、非常に安全です。単一の辞書の単語は非常に安全ではありませんが、複数の単語は覚えやすく安全です (攻撃者は、たとえば 1000 単語の辞書でも非常に多くの 4 単語の組み合わせをすべて試す必要があります)。

したがって、はるかに優れたパスワード ポリシーは次のようになります。

  • 明らかに悪いシーケンスを拒否します。それは 12345 や 54321 のような連続した数字です。qwertz、qwerty などもダメです。
  • 全体として辞書にあるパスワードをすべて拒否します。英語の辞書と、サイトがサポートする各言語の辞書の両方を必ず使用してください。
  • 安全でない可能性があるその他のパスワードを拒否します。ユーザー名が含まれていますか (逆であっても)? いいえ。ユーザーのメール アドレスの @ の前の部分が含まれていますか? いいえ。彼の生年月日が含まれていますか?いいえ。
  • 少なくとも 8 文字が必要です (既に意図しているように)。

IT Security Stack Exchange サイトにも興味深い投稿があります。これを読む必要があります: Short complex password, or long dictionary passphrase?

于 2013-09-11T15:47:43.833 に答える
0
string PASSWORD_PATTERN = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{8,20})";
string password = "Password@1#";
Regex.IsMatch(password,PASSWORD_PATTERN);

これを試して。

于 2013-09-11T15:43:22.380 に答える