みなさんこにちは!新卒で週2ブログ投稿している人間です。
この活動でより良い学習につなげられたらなと日々頑張っています!
Webサービスにたくさん登録する現代では、パスワードの使い回しは危険ですよね。
でも、複雑なパスワードを毎回考えるのは大変…。
そこでこの記事では、Pythonを使って、安全なパスワードを自動で生成するツールを一緒に作っていきます。プログラミングの知識はなくても大丈夫です!
前回の記事と同じようにサンプルコードを記載しているので、真似をしながら、パスワード生成の仕組みを学び、セキュリティの第一歩を踏み出しましょう!
前回の記事
記事のゴール
この記事を読み終える頃には、指定した文字数と文字の種類(大文字、小文字、数字、記号)で、ランダムなパスワードを生成するツールがあなたのパソコンで動くようになります。
記事の対象読者
- パスワードを毎回考えるのが面倒な方
- Pythonで「文字列」や「ランダム」の扱いに慣れたい方
- プログラミングで身近な問題を解決する楽しさを体験したい方
1. はじめに:なぜパスワード生成ツールが必要なの?
1.1.パスワードの使いまわしはなぜ危ないの?
パスワードの使い回し、ついついやってしまいがちですよね。多くのWebサービスに登録していると、全部違うパスワードを覚えるのは大変です。しかし、パスワードを使い回すと、たった一つのサービスからパスワードが漏れただけで、他の全てのサービスも乗っ取られてしまう危険性があります。
これを防ぐためには、サービスごとに別々のパスワードを使うことがとても重要です。
また、別々のパスワードを設定していても、
- アプリ1:1111111111、
- アプリ2:2222222222
のように単純なパスワードでは意味がありません。それぞれに複雑で安全なパスワードが必要です。
1.2.複雑で安全なパスワードとはどんなもの?
- 文字数: 長ければ長いほど安全です。一般的には10文字以上が推奨されています。
- 文字の種類: アルファベットの大文字・小文字、数字、記号を混ぜることで、より推測されにくいパスワードになります。
毎回このようなパスワードを自分で考えるのは大変ですよね。だからこそ、Pythonを使ってパスワード生成ツールを自作することで、この問題を解決できるのです。
1.3.このツールを作ることで学べる事
- 文字列操作: アルファベットや数字、記号といった文字をプログラムで自由に扱う方法。
- ランダム生成: 乱数を使って、予測不能な結果を生成する方法。
身近な課題をプログラミングで解決する楽しさを、ぜひ一緒に体験しましょう!
2. パスワード生成ツールを作ってみよう!
ここからが本番です!少しずつコードを書いて、ツールを完成させていきましょう。
2.1. まずは必要な「材料」を準備しよう
パスワードを生成するには、まずパスワードに含めるための「材料」、つまり文字のセットを準備する必要があります。アルファベットの大文字・小文字、数字、記号を一つずつ手で入力するのは大変ですよね。
そこで登場するのが、Pythonのstring
モジュールです。これは、プログラミングで文字列を扱う際に役立つ便利な機能がまとまっています。
まずは、おみくじアプリのときと同じように、string
モジュールを使うための「おまじない」を書いて、プログラムに呼び出しましょう。
import string
この一行で、string
モジュールが提供する機能が使えるようになりました。
次に、パスワードに使う文字を取得します。string
モジュールには、よく使う文字のセットがすでに用意されています。
-
string.ascii_letters
: アルファベットの大文字と小文字(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
) -
string.digits
: 10種類の数字(0123456789
) -
string.punctuation
: 一般的な記号(!"#$%&'()*+,-./:;<=>?@[\]^_
{|}~`など)
これらの文字を全てまとめることで、パスワードの「材料」を準備できます。Pythonでは、文字列は+
記号で簡単につなげることができます。
以下のコードを記述し、実行してみましょう。
import string
# パスワードに含める全ての文字を一つの文字列にまとめます
chars = string.ascii_letters + string.digits + string.punctuation
# 準備した文字を確認
print("パスワードの材料:", chars)
実行結果:
パスワードの材料: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
これで、パスワードを生成するための文字のセットが完成しました。chars
という変数に、全ての文字がまとめられています。この「箱」の中身を使って、次のステップでランダムなパスワードを作っていきます。
2.2. パスワードをランダムに作ろう
次に、準備した文字の中からランダムに文字を選んで、パスワードを作ります。おみくじアプリで使ったrandom
モジュールを使用します。
import string
import random
次に、パスワードの長さを決めます。今回は12文字に設定してみましょう.
12回、ランダムに文字を選ぶという繰り返し処理を行います。繰り返し処理にはfor
ループを使います。
以下のコードを、chars
を定義した行の下に追記して実行してみてください。
import string
import random
# 使用する文字セット(大文字・小文字・数字・記号)
chars = string.ascii_letters + string.digits + string.punctuation
# パスワードの長さ
length = 12
# パスワードを格納する空のリスト
password = []
# length回、繰り返し処理を行います
for i in range(length):
# 「chars」の中からランダムに1文字選ぶ
random_char = random.choice(chars)
# 選んだ文字を「password」に追加
password.append(random_char)
# 選ばれた文字のリストを確認してみましょう
print("選ばれた文字のリスト:", password)
実行結果例(実行するたびに変わります):
選ばれた文字のリスト: ['$', 'G', 'v', 'b', '8', 'y', 'S', 'j', ']', '3', 'e', 'x']
解説:
-
length = 12
: パスワードの文字数をlength
という変数に保存しています。 -
password = []
: これはリストと呼ばれる箱です。複数の文字を順番に保管しておくことができます。 -
for i in range(length):
: これは「length
(この場合は12)回、この中身の処理を繰り返してください」という命令です。i
は単に繰り返しの回数を数えるためのもので、今は深く考えなくても大丈夫です。 -
random.choice(chars)
: これは「chars
という文字列の中から、ランダムに1文字選ぶ」という命令です。おみくじアプリのrandint()
と似ていますが、こちらは文字列の中から選ぶときに使います。 -
password.append(random_char)
: リスト(password
)に、append()
という機能を使って、新しく選んだ文字(random_char
)を追加しています。
この結果では、まだパスワードがバラバラな文字のリストになっています。次のステップで、これを一つのパスワードにまとめます。
2.3. パスワードをきれいに整形しよう
バラバラなリストのままだと扱いづらいので、最後に一つの文字列にまとめます。
これには、join()という便利な機能を使います。
以下のコードを、先ほどのコードに追記して実行してみてください。
# リストの文字を一つの文字列に結合
password = "".join(password)
# 完成したパスワードを表示
print("生成されたパスワード:", password)
実行結果例(実行するたびに変わります):
生成されたパスワード: PIO%3k]02|n&
2.4. 完成!パスワード生成ツールを動かしてみよう!
これで、安全なパスワードを自動で生成するツールの完成です!これまでのコードをすべてまとめると、以下のようになります。
password_generator.py
というファイル名で保存し、実行してみてください。
import string
import random
# 使用する文字セット(大文字・小文字・数字・記号)
chars = string.ascii_letters + string.digits + string.punctuation
#パスワードの長さを設定
length = 12
# パスワードを格納するリスト
password = []
# 設定した文字数(length)の分だけ繰り返し処理
for i in range(length):
# 「chars」からランダムに1文字を選ぶ
random_char = random.choice(chars)
# 選んだ文字をリストに追加
password.append(random_char)
# リストに格納された文字をすべて結合
password = "".join(password)
# 完成したパスワードを画面に表示
print("生成されたパスワード:", password)
実行結果例(実行するたびに変わります):
生成されたパスワード: n@gA3c!L8$7P
これでパスワードを求められたときにわざわざ考えず、新たなパスワードを作成することができますね。
パスワードの文字数を変えてみよう!
コードのlength = 12
の部分を変えることで、生成するパスワードの長さを自由に変更できます。
例えば、length
を8
にすれば8文字のパスワードが、16
にすれば16文字のパスワードが生成されます。色々な長さを試して、どのくらいのパスワードが作れるか試してみてください。
# ここを好きな数字に変更してみましょう
length = 16
これで、パスワード生成ツールが完成です!
3. おわりに
今回は、Pythonを使って ランダムなパスワードを自動生成するツールを作ってみました。
特別なライブラリは使わず、標準の string
や random
モジュールだけでシンプルに作れるので、プログラミング初学者の方にも理解しやすい内容だったと思います。
学べたポイント
- パスワードに使える文字の種類(大文字・小文字・数字・記号)
-
random.choice()
でのランダム選択 -
for
ループによる繰り返し処理 -
"".join()
でリストを文字列に結合
これらは他のツールやアプリを作る際にも役立つ基本スキルです。
文字数や構成を自由にカスタマイズして、自分だけのパスワード生成ツールを作成してみてください。
さらに興味があれば:
・パスワードの長さを指定可能にする
→ ユーザーがパスワードの文字数を自由に決められるように、Pythonの input()
関数を使ってみましょう。これにより、実行のたびに好きな長さでパスワードを生成できます。
・生成されたパスワードをクリップボードにコピー
→ pyperclip
ライブラリを使えば、生成したパスワードを自動的にコピーできます。ユーザーは「Ctrl + C」を押さなくてもすぐに貼り付け可能になる便利機能です。
・forループよりスマートに:リスト内包表記
→ Pythonでは for
文を使わず、短く書ける「リスト内包表記」という構文があります。これを使うと、よりスッキリしたコードになります。!
ぜひ挑戦してみてください!
おまけ
くすりの窓口にてインターン募集中!! 8.9.10月開催
https://internshipguide.jp/interns/internDetail/17895