我是靠谱客的博主 端庄吐司,最近开发中收集的这篇文章主要介绍python请编写程序、生成随机密码_Python v3(随机密码生成器),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这个问题有几个细微差别:有些答案使用string.printable,但这不是一个好主意,因为它包含空格字符。虽然对于密码来说,它们并不是严格的非法的,但是您很难看到它们,因此无法将选项卡与几个空格(等等)区分开来。下面我只使用大写字母、数字和标点符号。

基于元素位置从一组字符中随机选择不是随机的,因为每个包含的字符类的基数不是均匀分布的:26小写字母;26大写字母;10数字;32标点符号。因此,生成的密码可能包含的字母多于标点字符和数字;标点字符多于数字;(等等)。因此,如果使用random.choices()(如在其他答案中一样),还应该使用weights=和cum_weights=选项,以消除上述偏见,通过晚上的分布。

也就是说,我鼓励在这个用例中使用Python的secrets模块,而不是它的random模块。从他们的documentation on random:Warning: The pseudo-random generators of this module should not be used

for security purposes. For security or cryptographic uses, see the

secrets module.

下面是一个使用Python-3的面向功能的解决方案。它只使用secrets.choice()。它并不能完全解决随机问题(还存在其他细微差别),但它确实改善了选择分布以减少偏差:>>> import string, secrets

>>> char_classes = (string.ascii_lowercase,

string.ascii_uppercase,

string.digits,

string.punctuation)

>>> size = lambda: secrets.choice(range(8,13)) # Chooses a password length.

>>> char = lambda: secrets.choice(secrets.choice(char_classes)) # Chooses one character, uniformly selected from each of the included character classes.

>>> pw = lambda: ''.join([char() for _ in range(size())]) # Generates the variable-length password.

演示:使用从每个字符类中统一选择的字符生成10个可变长度密码字符串:>>> for i in range(1,11):

>>> p = pw()

>>> print('%i) %i chars :: %s' % (i,len(p),p))

1) 11 chars :: IwWNEAUmnJt

2) 10 chars :: ;N/'tO6RTv

3) 8 chars :: l=5.2CDh

4) 10 chars :: V0=I+A`t2Q

5) 12 chars :: PQm8:f,#56"9

6) 10 chars :: KOdx9~%r;F

7) 11 chars :: 67U8}3>F{

8) 11 chars :: G$5y~3fE7o*

9) 10 chars :: 70,|=Rexwn

10) 8 chars :: &31P^@cU

最后,当我们在这里使用secrets模块时,可以使用numpy和numpy.random执行类似的操作。我希望这有帮助!

最后

以上就是端庄吐司为你收集整理的python请编写程序、生成随机密码_Python v3(随机密码生成器)的全部内容,希望文章能够帮你解决python请编写程序、生成随机密码_Python v3(随机密码生成器)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部