这里是生成密码代码的片段,
关于这个我有两个问题,你能分享一下如何理解吗?urandom(6)
,来自urandom的帮助说,返回n个适合加密使用的随机字节,也就是说,它将返回6个字节,是ASCII的6个字节吗?ord(c)
,获取上述字节的十进制基数,为什么这里要传输到十进制基数?
帮助urandom
:
def urandom(n): # real signature unknown; restored from __doc__
"""
urandom(n) -> str
Return n random bytes suitable for cryptographic use.
"""
return ""
Python脚本:
from os import urandom
letters = "ABCDEFGHJKLMNPRSTUVWXYZ"
password = "".join(letters[ord(c) % len(letters)] for c in urandom(6))
最佳答案
urandom
将返回一个字节(即0到255之间的值)。示例代码使用该值和模运算符(%
)将其转换为0到22之间的值,以便它可以返回23个字母中的一个(I
、O
和Q
不包括在内,以免与数字混淆)。
请注意,它不是一个完美的平衡算法,因为它更倾向于前3个字母(A
、B
和C
),因为256不能被23整除,而256 % 23
是3
。