[解決済み] Pythonでパスワードを生成する
2023-08-10 23:03:31
質問
Pythonで英数字のパスワードを生成したいです。いくつかの可能な方法は、次のとおりです。
import string
from random import sample, choice
chars = string.letters + string.digits
length = 8
''.join(sample(chars,length)) # way 1
''.join([choice(chars) for i in range(length)]) # way 2
しかし、私はどちらも好きではありません。
- 方法1 一意な文字だけが選択され、長さが > len(chars) のパスワードは生成できません。
-
方法2
私たちは
i
変数が未使用であり、私はそれを避けるためにどのように良い方法を見つけることができません。
それで、他の良いオプションがありますか?
追伸:ここで、いくつかのテストとして
timeit
を使って100000回繰り返したところです。
''.join(sample(chars,length)) # way 1; 2.5 seconds
''.join([choice(chars) for i in range(length)]) # way 2; 1.8 seconds (optimizer helps?)
''.join(choice(chars) for _ in range(length)) # way 3; 1.8 seconds
''.join(choice(chars) for _ in xrange(length)) # way 4; 1.73 seconds
''.join(map(lambda x: random.choice(chars), range(length))) # way 5; 2.27 seconds
ということで、勝者は
''.join(choice(chars) for _ in xrange(length))
.
どのように解決するのですか?
この場合 secrets モジュール を使って暗号的に安全なパスワードを生成する必要があります。これは Python 3.6 から利用可能です。ドキュメントから引用しています。
import secrets
import string
alphabet = string.ascii_letters + string.digits
password = ''.join(secrets.choice(alphabet) for i in range(20)) # for a 20-character password
レシピとベストプラクティスの詳細については
Python ドキュメントのレシピに関するこのセクションを参照してください。
. また
string.punctuation
あるいは、単に
string.printable
を使うこともできます。
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] Pythonでファイルの読み込みと上書きをする
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複