5

私の質問は、生成されるたびに長さが異なる (8 ~ 12 文字) ランダムなパスワードを生成する方法です。

これは私のコードです:

import string
import random

def randompassword():
    chars=string.ascii_uppercase + string.ascii_lowercase + string.digits
    size=8 
    return ''.join(random.choice(chars) for x in range(size,12))

print(randompassword())
4

6 に答える 6

15

size = 8; range(size, 12)は常に array を返す[8,9,10,11]ため、常に長さ 4 のパスワードを取得します。代わりに、randint事前に使用してこの特定のパスワードのサイズを決定します。

import string
import random

def randompassword():
  chars = string.ascii_uppercase + string.ascii_lowercase + string.digits
  size = random.randint(8, 12)
  return ''.join(random.choice(chars) for x in range(size))
于 2013-10-06T19:56:49.050 に答える
1

編集: 以下に示すように、string.printable文字列には、パスワードに使用すると問題を引き起こす可能性のある文字が含まれています。このビルトイン セットに依存する代わりに、使用可能な文字のカスタム セットを定義する方がよいでしょう。パスワードの強度を向上させるための LHF であるスペースなどの文字を忘れないでください。UI がユーザーの入力を削除して、ユーザーが有効なパスワードを入力できないようにする可能性があるため、見出し/末尾のスペースを必ず処理してください。

import random
import string

def randompassword():
    return ''.join([random.choice(string.printable) for _ in range(random.randint(8, 12))])
于 2013-10-06T19:59:38.880 に答える
1

と が原因で、4文字しか印刷されていないと思いsize = 8ますrange(size,12)。これは、range(8, 12) = 4 文字に変換されます。より広い範囲に割り当てる2番目の数値を増やして、ランダムな文字を出力することができます

import string
import random

def randompassword():
    chars=string.ascii_uppercase + string.ascii_lowercase + string.digits
    size= 8
    return ''.join(random.choice(chars) for x in range(size,20))

print(randompassword())

また、python のランダムなドキュメントをこちらで確認してください。

于 2013-10-06T20:12:09.010 に答える
1

string.ascii_letters #大文字と小文字のすべてのアルファベットを考慮します。 string.digits #0 ~ 9 桁を考慮します。 string.punctuation #記号のような特殊文字を考慮します。 random.choice #指定されたデータからランダムに選択することを考慮します。 range(random.randint(6, 12)) #指定されたデータからランダムな int 範囲を選択することを検討します。 print(generator_pw()) #ランダムに生成されたパスワードを出力します。

import random, string

def generator_pw():
    pwd = string.ascii_letters + string.digits + string.punctuation
    return "".join(random.choice(pwd) for x in range(random.randint(6, 12)))

print(generator_pw())
于 2019-08-29T12:33:43.747 に答える
0

range(size,12)(8 にハードコーディングした) から 12 までの数字のみを返すsizeため、パスワードの長さは 4 文字のみになります。それを作る... for x in range(size)

于 2013-10-06T19:57:44.070 に答える