Pythonでn桁の半角英数字が混在したパスワード文字列を生成する関数
- 公開日:2019/01/22
- 更新日:2019/01/22
- 投稿者:n bit
仮パスワードの発行時など任意でn桁の半角英数字が混在したようなパスワード文字列を自動生成したい場合があります。今回はそのようなランダムパスワード文字列を自動生成できる関数の作成方法と使い方を解説します。
この記事は約 分で読めます。(文字)
Pythonでn桁の半角英数字が混在したパスワード文字列を生成
Djangoで管理者ではなくウェブアプリケーションを利用するだけのユーザを登録するときに自動で生成したパスワードを発行して仮パスワードとしたかったのでランダムなパスワード生成プログラムが必要でした。
ランダムなパスワードを生成する方法はいくつかありますが後々パスワードの組み合わせ方法も自由に選択できるようにしたかったため、任意の文字列『半角英数字(大文字小文字含む)』からランダムにチョイスするコードにしています。
n桁の半角英数字が混在したパスワード文字列を生成する方法
Python3.6以降で『random.choices』の機能が変更されキー『k』でチョイスする数をコントロールできようになっています。
そこで今回は『random.choices』を利用してパスワードを生成する関数にしました。作成した独自関数は以下の通りです。
n桁の半角英数字が混在したパスワード文字列を生成する関数
import random
import string
def get_random_str(num):
return ''.join(random.choices(string.ascii_letters + string.digits, k=num))
ランダムなパスワード文字列を生成する関数のコード内容を解説していきましょう。見ての通りとてもシンプルなコードで難しいところは特にありません。
関数の1行目は関数名を定義しているだけです。引数にはn桁にあたる数値を『num』で指定できるようにしています。
def get_random_str(num):
2丁目の内容は少し分解して解説しておきましょう。まず『random.choices』の使用方法は以下の通りです。
- random.choices(選び出す対象となる文字列, k=選び出す数)
第一引数にはランダムに選び出す対象となる文字列を指定します。キー『k』には対象文字列から選び出す数を指定しましょう。
選び出す対象文字列には今回『大文字小文字を含む半角英数字』を使用したいため以下のようにしました。
- string.ascii_letters
- string.digits
string.ascii_lettersで『大文字小文字を含む半角英字』
string.ascii_lettersは以下のように『大文字小文字を含む半角英字』を出力します。
print(string.ascii_letters)
出力結果
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
string.digitsで『半角数字』
string.digitsは以下のように『半角数字』を出力します。
print(string.digits)
出力結果
0123456789
string.ascii_letters + string.digitsで『大文字小文字を含む半角英数字』
string.ascii_letters + string.digitsとすることで目的とする『大文字小文字を含む半角英数字』を出力しています。
print(string.ascii_letters + string.digits)
出力結果
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
『random.choices』のリスト出力を『join』で結合
『random.choices』からは以下のようにリスト形式で出力されますので
x = random.choices(string.ascii_letters + string.digits, k=8)
print(x)
出力結果
['j', 'Y', '1', 'f', 'z', 'h', 'f', '0']
最後に『join』を使ってリスト要素を全て結合し1つのランダム文字列として出力します。
x = random.choices(string.ascii_letters + string.digits, k=8)
print(''.join(x))
出力結果
jY1fzhf0
ちなみに『random.choices』はランダムに抽出するときに重複する場合があります。抽出時に重複が必要ない場合は『random.sample』をご利用ください。
『random』モジュールについての詳しい解説は下記のページで行っています。
関数の利用方法
この関数の利用方法は引数に自分が指定したい桁数を数値で渡すことでその桁数のランダム文字列が出力されてきます。
print(get_random_str(8))
出力結果
jY1fzhf0
今日のdot
Pythonでn桁の半角英数字が混在したパスワード文字列を生成する関数は以下の通りです。
import random
import string
def get_random_str(num):
return ''.join(random.choices(string.ascii_letters + string.digits, k=num))
頻繁に利用されるような関数ではありませんがいちど作っておくと使い回しが効くものなので関数化しておきましょう。
【フリーランス向けの完全無料Pythonプログラミング講座】
dot blogではこの記事以外にも完全無料でフリーランス向けのPythonプログラミング講座を公開中です。フリーランスとして活躍し稼ぐための強力な武器となりますよ。
Python入門講座【無料のプログラミング学習講座】
最近特に注目度が高くなってきているプログラミング言語Python。転職、フリーランス、独立・起業を検討中、日々の業務が忙しい社会人等は今こそ身に付けておきたいスキルの1つ。初心者向けにやさしいプログラミング学習内容のPython入門講座を無料で公開。