Python で、パスワード ジェネレーターを書きたいと思います。
優れた強力なパスワードを作成するには、プログラムにどのような情報を入力する必要があると思いますか?
答えは一文で十分です。思考プロセスを開始したいだけです。
xkcdコミックの精神で...
>>> import random
>>> def password_gen():
... with open('/usr/share/dict/words') as f:
... words = [w.strip().lower() for w in f if w.strip().isalpha()]
... while True:
... yield ' '.join(random.sample(words, 4))
...
>>> g = password_gen()
>>> next(g)
'mansion yodelling sumner coordination'
>>> next(g)
'proving velvetiest upload muggers'
>>> next(g)
'southey unfortunately longshoremen settings'
>>> next(g)
'inundated mules coevals vicious'
import random
random.choice(['password', 'password1'])
パスワードをランダムに生成することは、ほとんどの場合、悪い考えであることに注意してください。代わりに、長い一意のリセットキーを使用して、ある種のパスワードリセットアルゴリズムを実装します。たとえば、Andbrewsの回答に従ってuuidで生成されます。
ただし、クライアント/上司が単に理由を聞くことを拒否したためなど、何らかの理由でリセット手順を実装できない場合は、少なくとも、ユーザーが新しいパスワードを受け取ったら、パスワードを次のように変更する必要がある機能を実装します。新しいもの。ユーザーに与えられたパスワード(紙または電子メールで、したがってすべての人が利用できる)は、ユーザーだけが知っているものに変更する必要があります。
もう1つ考えるべきことは、以前に送信されたパスワードを知っていても、パスワードを推測できないようにすることです。したがって、ランダムモジュールは使用しないでください。私は引用します:
Pythonは、コアジェネレーターとしてメルセンヌツイスターを使用します。53ビットの高精度フロートを生成し、周期は2**19937-1です。Cの基本的な実装は、高速でスレッドセーフです。メルセンヌツイスターは、現存する中で最も広範囲にテストされた乱数ジェネレーターの1つです。ただし、完全に決定論的であるため、すべての目的に適しているわけではなく、暗号化の目的にはまったく適していません。
代わりに、ランダムパスワードの基礎は。である必要がありますos.urandom()
。ただし、バイナリバイトのシーケンスが生成されるため、変更する必要があります。モジュールはそのbinascii
ために使用できます。hexlify()をお勧めします。これにより、入力が最も簡単なパスワードが作成され、奇妙な文字がまったく表示されなくなります。
>>> import os
>>> import binascii
>>> binascii.hexlify(os.urandom(10)).strip()
'7b2d0d5e40c18938bca9'
最初に、生成されたパスワードに選択する文字を定義します。string モジュールで定義された定数がここで役立つ場合があります。次に、random モジュールを使用して、これらの文字をランダムに選択します。次に例を示します。
import string
import random
def random_password(alphabet=string.ascii_letters+string.digits, length=8):
return ''.join(random.sample(alphabet, length))
>>> random_password()
'KwYGBtFb'
>>> random_password()
'CJOSx8tj'
>>> random_password()
'62BNJyX5'
uuid モジュールを使用できます
import uuid
print uuid.uuid4()