Почему с помощью этого кода можно генерировать случайный пароль? - PullRequest
0 голосов
/ 10 января 2019

Вот фрагмент кода для генерации пароля, У меня есть 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 ""

Скрипт Python:

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

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

ord() функция принимает строку, содержащую один символ, и возвращает ее индекс Unicode.

ех.

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

Он используется не для получения десятичной основы байта, как вы упомянули, а для его индекса Unicode (его место в таблице Unicode).

P.S. : - Даже если он возвращает индекс Unicode, но это не означает его, range = len (Unicode Table), причина в том, что ваш компилятор python может не поддерживать такие длинные наборы символов при нормальных обстоятельствах.

0 голосов
/ 10 января 2019

urandom вернет байт (то есть значение от 0 до 255). Пример кода использует это значение и оператор по модулю (%), чтобы преобразовать его в значение от 0 до 22, чтобы он мог вернуть одну из 23 букв (I, O и Q исключено не путать с цифрами).

Обратите внимание, что это не идеально сбалансированный алгоритм, так как он предпочел бы первые 3 буквы (A, B и C) больше, потому что 256 не делится на 23, а 256 % 23 равно 3.

...