pythonでパスワードを生成するプログラムを作ろう


皆さんこんにちは。インフラチームの齊藤です。

今回はpythonを用いてパスワードを作成する方法を書いてみようと思います。

早速ですが、みなさんは、パスワードを日頃どのように決めてらっしゃいますか?

パスワードを決める際にどんなものにしようか悩まれる方は多いのではないでしょうか。

インターネットに繋がっている環境があれば、
既存のパスワード作成サイトを探すこともできますが、
ネットに繋がっていない環境でサーバのパスワードを決める必要がある場合も考えられます。

そんなわけで、今日はパスワードを作成する簡単なプログラムをご紹介します。

パスワードを生成する

今回は、8文字のパスワードを10個生成するプログラムをpythonで作成しましょう。
以下がソースコードになります。


from random import choice
from string import ascii_letters, digits, punctuation

def gen_passwd(length=8, chars=ascii_letters+digits+punctuation):
    return ''.join([choice(chars) for i in range(length)])

for i in range(10):
    print(gen_passwd(8, ascii_letters+digits))

ポイントを絞って解説します。

gen_passwdは、パスワードの文字数と単語の羅列を引数として受け取り、
パスワードを出力する関数です。

ascii_lettersがa~z,A~Zのアルファベットの列です。

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

digitsが0~9の文字列です。

0123456789

このプログラムをお手元のPCで実行してみましょう。

$ python pass.py
49HisGp9
lCH0m8gC
iw7kPHF9
sxRXMnVS
h9u2g8Zd
7XI3Abwk
U47mAn36
wtrxmhnJ
1Ml5DRTa
GDlIO7Bn

パスワードの候補が出力されました!

より強力なパスワードにする

パスワードは特殊記号を使用することでより強力なパスワードにすることができます。

特殊記号とは以下のような記号です。

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

これを使用するために、関数の引数にpunctuationを足してプログラムを動かすと、

$ python random_pass.py
[root@sim pybox]# ./random_pass.py
P`)Y*HDg
&j/{JigU
NIDmYL|v
DTg,,<8u
[W:=7Y%H
_JDy}OXJ
?4e0]fW
:-rR2X4q
#)M7/f+K
<IY?'v$U

特殊記号が含まれたパスワードが生成されました。これでより強力なパスワードとなります。
パスワードの長さを8文字から変更するのが億劫になったら、sysやargparseをインポートすることでプログラムをコマンド化することもできます。

translateを使用してあらかじめ使わない文字を除外することもできるでしょう。

是非、拡張してみてください。

補足

サーバを攻撃する方法のひとつに辞書攻撃というものがあります。
クラッカーは辞書攻撃を仕掛ける際、パスワードを破るために、パスワードで使用されやすい単語が載った辞書ファイルを用意しています。

代表的な辞書はhttp://download.openwall.net/というサイトで手に入れられるようです。

クラッカーは、この辞書ファイルをもとに攻撃を仕掛けてくるかもしれません。

あなたのパスワードがこの辞書ファイルに含まれている文字を含んでいる場合には、
パスワードは破られてしまう可能性が当然あがります。
また、より直接的な方法として総当り攻撃と呼ばれるものも存在します。
こちらを回避したければ、パスワードを長くすることをオススメします。

Basic認証やWordpressのログイン画面など、
不特定多数の人物がアクセスできる場合には上記内容を是非一度、ご検討ください。


この記事をかいた人

About the author