[Osaka/Yokohama] Looking for infrastructure/server side engineers!

[Osaka/Yokohama] Looking for infrastructure/server side engineers!

[Deployed by over 500 companies] AWS construction, operation, maintenance, and monitoring services

[Deployed by over 500 companies] AWS construction, operation, maintenance, and monitoring services

[Successor to CentOS] AlmaLinux OS server construction/migration service

[Successor to CentOS] AlmaLinux OS server construction/migration service

[For WordPress only] Cloud server “Web Speed”

[For WordPress only] Cloud server “Web Speed”

[Cheap] Website security automatic diagnosis “Quick Scanner”

[Cheap] Website security automatic diagnosis “Quick Scanner”

[Low cost] Wasabi object storage construction and operation service

[Low cost] Wasabi object storage construction and operation service

[Reservation system development] EDISONE customization development service

[Reservation system development] EDISONE customization development service

[Registration of 100 URLs is 0 yen] Website monitoring service “Appmill”

[Registration of 100 URLs is 0 yen] Website monitoring service “Appmill”

[Compatible with over 200 countries] Global eSIM “beSIM”

[Compatible with over 200 countries] Global eSIM “beSIM”

[Compatible with Chinese corporations] Chinese cloud / server construction, operation and maintenance

[Compatible with Chinese corporations] Chinese cloud / server construction, operation and maintenance

[YouTube] Beyond official channel “Biyomaru Channel”

[YouTube] Beyond official channel “Biyomaru Channel”

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,358
X facebook はてなブックマーク pocket
[2024.6.30 CentOS support ended] CentOS server migration solution

[2024.6.30 CentOS support ended] CentOS server migration solution

[2025.6.30 Amazon Linux 2 support ended] Amazon Linux server migration solution

[2025.6.30 Amazon Linux 2 support ended] Amazon Linux server migration solution

[Osaka/Yokohama] Actively recruiting infrastructure engineers and server side engineers!

[Osaka/Yokohama] Actively recruiting infrastructure engineers and server side engineers!

The person who wrote this article

About the author