Pythonでn桁の半角英数字が混在したパスワード文字列を生成する関数のイメージ画像

Pythonでn桁の半角英数字が混在したパスワード文字列を生成する関数

  • 公開日:2019/01/22
  • 更新日:2019/01/22
  • 投稿者:n bit

仮パスワードの発行時など任意でn桁の半角英数字が混在したようなパスワード文字列を自動生成したい場合があります。今回はそのようなランダムパスワード文字列を自動生成できる関数の作成方法と使い方を解説します。

  • Python

この記事は約 分で読めます。(文字)

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))

頻繁に利用されるような関数ではありませんがいちど作っておくと使い回しが効くものなので関数化しておきましょう。