Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonと正規表現を使ったパスワードの複雑性チェック方法

パスワードには一定以上の複雑さが求められるのが一般的です。本記事では、指定されたパスワードが所定の複雑性の基準を満たしているかどうかを検証する方法を解説します。検証には、Pythonの標準ライブラリである正規表現モジュール「re」を使用します。

例1:条件を満たすパスワードの検証

まず、有効なパスワードとみなすための条件を満たす正規表現を作成します。その後、reモジュールのsearch関数を使って、入力されたパスワードがこの条件に一致するかどうかを判定します。

以下の例では、パスワードの複雑性要件として次の条件を設定しています。

  • 小文字を1文字以上含むこと
  • 大文字を1文字以上含むこと
  • 数字を1つ以上含むこと
  • 特殊文字(@$!%*#?&など)を1つ以上含むこと
  • パスワードの長さは8〜18文字であること

サンプルコード

import re

pswd = 'XdsE83&!'
reg = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!#%*?&]{8,18}$"

# 正規表現をコンパイル
match_re = re.compile(reg)

# 正規表現で検索
res = re.search(match_re, pswd)

# 条件の検証
if res:
    print("Valid Password")
else:
    print("Invalid Password")

実行結果

上記のコードを実行すると、次のような出力が得られます。

Valid Password

例2:条件を満たさないパスワードの検証

次に、要件を満たしていないパスワードを使用した場合の動作を確認します。例えば、数字が含まれていないパスワードを入力すると、プログラムはそれを無効なパスワードとして判定します。

サンプルコード

import re

pswd = 'XdsEfg&!'
reg = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*#?& ])[A-Za-z\d@$!#%*?&]{8,18}$"

# 正規表現をコンパイル
match_re = re.compile(reg)

# 正規表現で検索
res = re.search(match_re, pswd)

# 条件の検証
if res:
    print("Valid Password")
else:
    print("Invalid Password")

実行結果

上記のコードを実行すると、次のような出力が得られます。

Invalid Password

まとめ

このように、正規表現の先読みアサーション(?=...)を組み合わせることで、大文字・小文字・数字・特殊文字の含有や文字数制限といった複数の条件を一度に検証できます。実際のアプリケーションでは、要件に応じて正規表現のパターンを調整することで、柔軟なパスワードポリシーを実装することが可能です。

  1. 【Python】pikepdfでパスワード保護されたPDFを解除する方法

    はじめに Pythonには、アプリケーション開発、Web開発、科学技術計算、ソフトウェアテスト、機械学習など、さまざまな用途に対応できる豊富なライブラリが揃っています。さらに情報セキュリティの分野でも、システムアプリケーションのテストや開発に活用されており、ハッシュ生成、情報収集・取得、暗号化・復号化、Webクローリング、スプーフィングなどに特化したスクリプトを備えたライブラリやツールが数多く公開されています。 本記事では、パスワードで保護されたPDFドキュメントを復号(ロック解除)するプログラムを作成します。復号には、よく使われるパスワードをまとめた「ワードリスト」を利用し、これを順番に試し

  2. 【初心者向け】Pythonのissuperset()メソッドの使い方をわかりやすく解説

    はじめにこの記事では、Pythonのissuperset()メソッドについて、基本的な仕組みから実際のコード例まで詳しく解説します。issuperset()は、セット(集合)に対して使用できるメソッドで、引数として渡されたセットのすべての要素が、呼び出し元のセットに含まれているかどうかを判定します。呼び出し元のセットBが、引数のセットAのすべての要素を含んでいる場合 → True を返すセットAの要素がすべてBに含まれていない場合 → False を返すつまり、「BがAの上位集合(スーパーセット)であるかどうか」を判定するためのメソッドです。基本構文B.issuperset(A)この式は、Bが