【问题标题】:is there a simpler way to generate random password [duplicate]有没有更简单的方法来生成随机密码[重复]
【发布时间】:2022-01-07 12:42:15
【问题描述】:
import string
import random
characters = list(string.ascii_letters + string.digits + "!@#$%^&*()")

i = input('Please enter confirm (input 1) to proceed with password creation (or any to quit):\n')
if i == 1:
  print("Generating username and password....") 
  length = int(input("Enter password length: "))
  random.shuffle(characters)


  password = []
  for i in range(length):
    password.append(random.choice(characters))


  random.shuffle(password)



  print("".join(password))

else:
   exit

是否有更简单的方法来生成随机密码,在 if 语句中生成密码也不起作用我该如何解决这个问题。我也希望能够调出我的密码,所以在我生成密码后如何将其放入变量中。

【问题讨论】:

  • input 总是返回一个字符串。做if i == '1':.
  • 跳过循环并执行password = characters[:length]。而且你不需要第二次洗牌。
  • 是的。 uuid.uuid4().hex 保证是唯一且足够强大的加密使用。
  • 嗯,那只使用十六进制数字的字母表。
  • @TimRoberts - 是的。然而,满足“有没有更简单的方法来生成随机密码”的规定要求。

标签: python list if-statement import generator


【解决方案1】:

这是你作为函数的方法,所以你可以对返回值做任何你想做的事情:

import string
import random

characters = list(string.ascii_letters + string.digits + "!@#$%^&*()")

def genpassword(length):
    random.shuffle(characters)
    return ''.join(characters[:length])

length = int(input("Enter password length: "))
print("Generating username and password....") 
password = genpassword(length)
print(password)

cmets 中提到的random.choices 选项是一个更好的实现。我将把它作为练习留给读者。

【讨论】:

  • 采用混洗字母表的前缀会生成一个糟糕的密码,因为它消除了任何重复字符的可能性,
  • 同意,OP 应该牢记这一点。我想在一个更好的信封中展示一些使用他的概念的东西。
  • password = "".join([random.choice(characters) for _ in range(lenght)])
  • @PedroMaia 真的那么就用password = ''.join(random.choices(characters, k=length))
猜你喜欢
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 2010-12-06
  • 2012-01-21
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
相关资源
最近更新 更多