Python シークレット モジュールを使用して、Python でパスワード ジェネレーターをコーディングし、安全なパスワードを生成する方法を学びます。
Python は、自動化、Web 開発、データ分析などのアプリケーション全体で使用できる多用途のプログラミング言語です。
Python を使用すると、Web サイトの監視、電子メールの送信、パスワードの生成などの実際のタスクを自動化できます。このチュートリアルでは、Python で安全なランダム パスワード ジェネレーターを作成する方法を学びます。
始めましょう…
パスワード ジェネレーターを Python でコーディングする必要がある 3 つの理由

安全なパスワードを生成して追跡することにうんざりしたことはありませんか? Python でパスワード ジェネレーターのコーディングを検討する必要がある理由は次のとおりです。
1. パスワード生成プロセスを自動化する
日常生活では、電子商取引 Web サイトから学習プラットフォームやコーディング プラットフォームに至るまで、数多くの Web サイトにアクセスすることになります。ほとんどの Web サイトでは、資格情報を使用してログインする必要があります。これは反復的なタスクであり、Python スクリプトを使用して自動化できます。
2. 安全なパスワードを生成する
セキュリティ上の制約を満たす強力なパスワードを考え出すのは困難な場合があります。強力ではない単純なパスワードは、セキュリティ攻撃を受けやすいです。

Python を使用すると、 安全な パスワードをプログラムで生成できます。これにより、パスワードの安全性を心配することなく、必要に応じてスクリプトを実行してパスワードを生成できます。
3. 実践的なプロジェクトをポートフォリオに追加する
初心者の Python プログラマーの場合は、プロジェクトを構築してスキルを磨き、ポートフォリオを通じてプログラミングの専門知識を披露する必要があります。
単純な Python スクリプトに加えて、さらにカスタマイズして、PyPI パッケージとして公開することができます。 Tkinter などのライブラリを使用してグラフィカル ユーザー インターフェイスを追加することもできます。
このようにして、独自のパスワード ジェネレーターをコーディングして、さまざまなサイトにわたってパスワードを安全に生成および管理できます。
Python のランダム モジュール: 十分に安全ですか?
Python の ランダム モジュールには、 アルファベットからサンプリングして 一見 ランダムなシーケンスを構築できる関数も用意されています。ランダム モジュールは 擬似ランダム シーケンスを生成します。擬似ランダム性が何を意味するのかを解析してみましょう。
擬似ランダムという用語は、シーケンスがランダムに見えても、実際には 決定的で あることを意味します。
したがって、ランダム シードを設定すると、ランダム モジュールは、同じシードで同じスクリプトを実行するすべてのマシン上で同じシーケンスを生成します。
このため、パスワードなどのセキュリティが重要なアプリケーションにはランダムを使用しないでください。
では、
random
モジュールはいつ使用できるのでしょうか?
機密性のないすべてのアプリケーションでは、ランダム モジュールを使用できます。たとえば、生徒数 40 人のクラスに、A、B、C という 3 セットの問題用紙があるとします。各生徒に特定のセットをランダムに割り当てたいとします。

この場合、以下に示すように、リスト内包表記内で
random.choice()
を使用できます。
import random
papers = ['A','B','C']
q_list = [random.choice(papers) for i in range(40)]
print(q_list)
Sample output:
['A', 'A', 'B', 'B', 'B', 'B', 'B', 'C', 'B', 'A', 'C', 'C', 'B',
'C', 'A', 'B', 'A', 'A', 'C', 'C', 'A', 'A', 'A', 'C', 'A', 'C',
'A', 'C', 'B', 'B', 'B', 'B', 'A', 'A', 'B', 'B', 'A', 'A', 'B', 'B']
📑 重要なポイント : 統計的シミュレーションには、
random
モジュールを使用できます。機密性の高いアプリケーションの場合は、secrets
モジュールを使用します。
Python Secrets モジュール: パスワードを保護するための鍵
Python 拡張提案
PEP 506 では
、パスワードやセキュリティ トークンなど、シーケンスを暗号的に安全にする必要がある場合は必ず
secrets
モジュールを使用するよう開発者にアドバイスしています。

この
secrets
、次のことを可能にするいくつかの組み込み関数があります。
- 暗号化アプリケーションにとって安全な乱数のシーケンスを生成します。
-
choice()
、randbits()
、randbelow()
などの関数を使用して、安全な乱数を生成します。 - パスワードのリセットや一時 URL などのためのトークンを生成します。
Python でパスワード ジェネレーターをコーディングする方法 [4 ステップ]
前提条件 : このチュートリアルを実行するには、コードを作成するために Python 3.6 以降のバージョンがインストールされている必要があります。 のオンライン Python コード エディターでサンプル コードを実行することもできます。
ステップ 1: 必要なモジュールをインポートする
最初のステップとして、
secrets
モジュールをインポートしましょう。このモジュールは Python 標準ライブラリに組み込まれているため、次のようにインポートできます。
import secrets
Python の組み込み
string
モジュールもインポートしましょう。
import string
ステップ 2: アルファベットを定義する
次のステップは、アルファベットを定義することです。 アルファベットは、 パスワード生成で考慮されるすべての文字のセットを示します。ここでは、小文字、大文字、特殊文字を含める必要があります。

string
モジュールは、アルファベットの定義に使用できる文字列定数を提供します。次の文字列定数を使用します。
-
ascii_letters
、小文字と大文字を連結したものです。 -
digits
定数は、0 ~ 9 の数字を含む文字列です:'0123456789'
。 -
punctuation
定数は、すべての特殊文字の文字列です。
letters = string.ascii_letters
digits = string.digits
special_chars = string.punctuation
最後に、上記の文字列定数を連結してアルファベットを取得しましょう。
alphabet = letters + digits + special_chars
ステップ 3: パスワードの長さを修正します。パスワードを生成する
パスワードの長さを変数
pwd_length
に保存しましょう。この例では、パスワード文字列の長さは 12 です。
pwd_length = 12
▶️ ここで、次のコードセルを実行してパスワードを生成します。
pwd = ''
for i in range(pwd_length):
pwd += ''.join(secrets.choice(alphabet))
print(pwd)
# Sample output
}2:Lz,1!Gvo@
上記のコードは次のことを行います。
-
パスワード文字列
pwd
最初は空の文字列です。 -
secrets.choice(alphabet)
、alphabet
からランダムにサンプリングされた 1 つの文字を返すことがわかっています。 -
join()
メソッドを使用して、この文字をpwd
文字列に追加します。文字間に空白を入れたくないため、区切り文字を''
に指定します。 - 上記の手順を繰り返してパスワードを生成するには、パスワードの長さと同じ回数だけ繰り返すループを使用します。
ステップ 4: 制約に基づいてパスワードをカスタマイズする
パスワードが特定の制約を満たしているかどうかを確認することで、パスワードの生成をカスタマイズできます。
たとえば、生成された長さ 12 のパスワード文字列が次の制約を満たすかどうかを確認してみましょう。
-
文字列
pwd
少なくとも 1 つの特殊文字が含まれている必要があります。 - 少なくとも 2 桁の数字が含まれている必要があります。
以下のコード スニペットでは、定義した制約に従って
if
ステートメントがチェックする条件を変更できます。
while True:
pwd = ''
for i in range(pwd_length):
pwd += ''.join(secrets.choice(alphabet))
if (any(char in special_chars for char in pwd) and
sum(char in digits for char in pwd)>=2):
break
print(pwd)
# Sample output
lX]{`y47pM4t
上記のコード セルでは、パスワード文字列
pwd
が制約を満たさない限り実行される無限 while ループを使用しています。生成されたパスワード
pwd
制約を満たすと、無限ループから抜け出します。
Python パスワード ジェネレーターの完全なコードは次のとおりです。
# necessary imports
import secrets
import string
# define the alphabet
letters = string.ascii_letters
digits = string.digits
special_chars = string.punctuation
alphabet = letters + digits + special_chars
# fix password length
pwd_length = 12
# generate a password string
pwd = ''
for i in range(pwd_length):
pwd += ''.join(secrets.choice(alphabet))
print(pwd)
# generate password meeting constraints
while True:
pwd = ''
for i in range(pwd_length):
pwd += ''.join(secrets.choice(alphabet))
if (any(char in special_chars for char in pwd) and
sum(char in digits for char in pwd)>=2):
break
print(pwd)
結論
このチュートリアルが終了しました。おめでとうございます。 🎉これで、Python でパスワード ジェネレーターをコーディングする方法を学習しました。
- 暗号的に安全なパスワードを生成するには、 random モジュールで はなく Secrets モジュールを使用する必要があります。
- 強力なパスワードは十分に長く、簡単に予測または生成できないという点でランダムである必要があります。大文字と小文字、数字、特殊文字を組み合わせて使用する必要があります。
- Python には、すべての文字、数字、および特殊文字を定数 ascii_letters 、 digits および punctuation としてそれぞれ提供する組み込み 文字列 モジュールが付属しています。これらの文字列定数にアクセスするには、構文 string.constant を使用します。
- 上記の定数を使用して、パスワード生成用のアルファベット (すべての文字のセット) を定義できます。
- アルファベットを定義したら、 secrets.choice() を使用してそこからランダムな文字をサンプリングできます。これをパスワードの長さの間繰り返すには、for ループを使用できます。
▶️ 次に、使用する Python Web サーバーのリストを読みます。