【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【2024年2月~】25年卒 エンジニア新卒採用の募集を開始!

【2024年2月~】25年卒 エンジニア新卒採用の募集を開始!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【中国現地企業に対応】中国クラウド / サーバー構築・運用保守

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

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のログイン画面など、
不特定多数の人物がアクセスできる場合には上記内容を是非一度、ご検討ください。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
1
読み込み中...
1 票, 平均: 1.00 / 11
2,292
X facebook はてなブックマーク pocket
【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【2024.6.30 CentOS サポート終了】CentOS サーバー移行ソリューション

【2024年2月~】25年卒 エンジニア新卒採用の募集を開始いたします!

【2024年2月~】25年卒 エンジニア新卒採用の募集を開始いたします!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

【大阪 / 横浜】インフラエンジニア・サーバーサイドエンジニア 積極採用中!

この記事をかいた人

About the author