Информация об изменениях

Сообщение Re[4]: Случайный пароль от 19.05.2023 14:41

Изменено 19.05.2023 14:42 vsb

Re[4]: Случайный пароль
Здравствуйте, netch80, Вы писали:

N>Можно, но если, например, 36 символов возможно в пароле (26 английских букв и 10 цифр), а мы берём по 1 байту входа на символ выхода... 256 делим на 36, в остатке 4 — это значит, что первые 4 в наборе будут генерироваться чаще, чем остальные (на 1/7 чаще).

N>Эффект не сильно большой, но для серьёзной секьюрити может влиять.
N>Если больше набор (до 70 символов можно позволить), эффект ещё сильнее, типа 1/3 разницы.
N>А если делить на входе числа от 0 до 2**64-1, эффект становится неизмеримо малым.
N>Это то, почему std::hash()() должен выдавать size_t (я удивлён, что не uintmax_t, но, видимо, сочли достаточным).
N>Не-топорно требует цепочечного деления или base32/base64/etc. — облом такое кодить без нужды

Берёшь остаток от деления на 64. Если результат меньше 36, возвращаешь его. Иначе генерируешь новое число. Способ простой и даёт равномерное распределение.
Re[4]: Случайный пароль
Здравствуйте, netch80, Вы писали:

N>Можно, но если, например, 36 символов возможно в пароле (26 английских букв и 10 цифр), а мы берём по 1 байту входа на символ выхода... 256 делим на 36, в остатке 4 — это значит, что первые 4 в наборе будут генерироваться чаще, чем остальные (на 1/7 чаще).

N>Эффект не сильно большой, но для серьёзной секьюрити может влиять.
N>Если больше набор (до 70 символов можно позволить), эффект ещё сильнее, типа 1/3 разницы.
N>А если делить на входе числа от 0 до 2**64-1, эффект становится неизмеримо малым.
N>Это то, почему std::hash()() должен выдавать size_t (я удивлён, что не uintmax_t, но, видимо, сочли достаточным).
N>Не-топорно требует цепочечного деления или base32/base64/etc. — облом такое кодить без нужды

Берёшь остаток от деления на 64. Если результат меньше 36, возвращаешь его. Иначе генерируешь новое число. Способ простой и даёт равномерное распределение.

Хотя для пароля проще взять 32 или 64 разных символа. Тогда заморачиваться не надо.