为什么使用此代码可以生成随机密码?

时间:2019-01-10 06:17:33

标签: python random cryptography passwords

以下是用于生成密码的代码段, 我对此有2个问题,请您分享如何理解?

  1. arr.length / 2,来自urandom的帮助,返回了n个适合密码使用的随机字节,也就是说,它将返回6个字节,是否是ASCII的6个?

  2. urandom(6),获取上述字节的十进制基数,为什么这里要转换为十进制基数?

ord(c)的帮助:

urandom

Python脚本:

def urandom(n): # real signature unknown; restored from __doc__
    """
    urandom(n) -> str

    Return n random bytes suitable for cryptographic use.
    """
    return ""

2 个答案:

答案 0 :(得分:5)

urandom将返回一个字节(即0到255之间的值)。示例代码使用该值和模运算符(%)将其转换为0到22之间的值,以便它可以返回23个字母之一(IOQ排除在外,以免与数字混淆。

请注意,这不是一个完美的平衡算法,因为它更喜欢前三个字母(ABC),因为256不能被23和256 % 233

答案 1 :(得分:1)

ord()函数接收包含单个字符的字符串,并返回其Unicode索引。

例如

ord("A") => 65
ord("£") => 163

它不是用来获取您提到的字节的十进制基数,而是用来获取其Unicode索引(在Unicode表中的位置)。

P.S。 :-即使返回Unicode索引,但这并不意味着它会返回range = len(Unicode Table),原因是您的python编译器在正常情况下可能不支持这么长的字符集。