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

bal*_*iao 2 python random passwords cryptography

这里有一个用于生成密码的代码段,我有2个关于此的问题,请问你能分享一下如何理解?

  1. urandom(6),来自urandom的帮助说,返回适合加密使用的n个随机字节,也就是说,它会返回6个字节,它是6个ASCII吗?

  2. ord(c) ,获取上面的字节的十进制基数,为什么这里转移到十进制基数?

帮助urandom:

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

    Return n random bytes suitable for cryptographic use.
    """
    return ""
Run Code Online (Sandbox Code Playgroud)

Python脚本:

from os import urandom
letters = "ABCDEFGHJKLMNPRSTUVWXYZ"
password = "".join(letters[ord(c) % len(letters)] for c in urandom(6))
Run Code Online (Sandbox Code Playgroud)

Sel*_*cuk 5

urandom将返回一个字节(即0到255之间的值).示例代码使用该值并取模运算符(%)将其转换成0和22之间的值,以便它可以返回23个字母(之一I,OQ被排除不与数字混淆).

请注意,这不是一个完美的平衡算法,因为这将有利于前3个字母(A,B,和C)多,因为256不是整除23 256 % 233.