我想使用python3
生成随机密码来加密我的文件,创建的随机密码应该有以下限制
- 最小长度应为12
- 必须包含一个大写字母
- 必须包含一个小写字母
- 必须包含一个数字
- 必须包含一个特殊字符
实际上,我对在有限制的python
中生成随机事物不太了解,所以我没有任何代码可以在这里显示。
您可以使用pythonsecrets
库从列表中选择一个字符。这里有一个例子:
import string
import secrets
symbols = ['*', '%', '£'] # Can add more
password = ""
for _ in range(9):
password += secrets.choice(string.ascii_lowercase)
password += secrets.choice(string.ascii_uppercase)
password += secrets.choice(string.digits)
password += secrets.choice(symbols)
print(password)
我对python和stackoverflow相对陌生,但以下是我解决您问题的方法:
import string
import random
def password_generator(length):
""" Function that generates a password given a length """
uppercase_loc = random.randint(1,4) # random location of lowercase
symbol_loc = random.randint(5, 6) # random location of symbols
lowercase_loc = random.randint(7,12) # random location of uppercase
password = '' # empty string for password
pool = string.ascii_letters + string.punctuation # the selection of characters used
for i in range(length):
if i == uppercase_loc: # this is to ensure there is at least one uppercase
password += random.choice(string.ascii_uppercase)
elif i == lowercase_loc: # this is to ensure there is at least one uppercase
password += random.choice(string.ascii_lowercase)
elif i == symbol_loc: # this is to ensure there is at least one symbol
password += random.choice(string.punctuation)
else: # adds a random character from pool
password += random.choice(pool)
return password # returns the string
print(password_generator(12))
我导入了两个模块,其中一个是"字符串",这使我可以访问包含所有所需字符的字符串。另一个是"随机",它允许我生成随机数并从字符串中选择一个随机字符。
使用random.randint(a,b(,我可以为大写、小写和标点符号生成随机位置,以确保每种字符至少有一个。
我做的唯一修改是,我让你可以生成任何长度的密码,只要你在函数中输入所述长度。
以下是一个输出示例:L";mJ{~xcL〔%M
您可以生成随机位,将它们转换为整数,对它们进行箝位,这样就不会拾取奇怪的字符,并将它们转换成字符
import random
passwrd = ''
length = 12
for _ in range(length):
bits = random.getrandbits(8)
num = (int('{0:b}'.format(bits),2) + 33) % 127
passwrd+= chr(num)
然后你可以检查你的条件是否满足。
下面的代码正是我所要求的,但我将@OliverF代码标记为这个问题的解决方案,因为他的代码也运行良好,并在我自己的答案之前发布。
#!/usr/bin/env python3
#import the necessary modules!
import random
import string
length = random.randint(12,25)
lower = string.ascii_lowercase
upper = string.ascii_uppercase
num = string.digits
symbols = string.punctuation
all = lower + upper + num + symbols
temp = random.sample(all,length)
password = "".join(temp)
print(password)