Какие возможные символы могут быть сгенерированы при преобразовании буфера в шестнадцатеричную строку? - PullRequest
0 голосов
/ 05 апреля 2019

Я хочу знать вероятность получения того же секрета, если он был сгенерирован с помощью следующей функции

const crypto = require('crypto');

const generateSecret = () => {
  const buffer = await crypto.randomBytes(8);
  return buffer.toString('hex').slice(0, 4);
}

Но я не уверен, какой диапазон символов можно создать с помощью buffer.toString('hex').Это все буквенно-цифровые символы?В данном случае это 62 символа (строчные + прописные + цифры).Если есть 62 символа, то (62 + 4 - 1)! / (4! * (62 - 1)!) Возможных комбинаций (с повторениями) или 677040. Таким образом, вероятность в этом случае составляет 1/677040 * 100, что составляет около0.00014%

1 Ответ

0 голосов
/ 05 апреля 2019

Гекс только даст вам 16 возможных символов, 0-9 и AF.Так что это 16^4 возможностей, 65,536.

Вы можете получить больше, используя toString(36), что даст вам 36 возможностей в каждом персонаже.Конвертер base 64 даст вам 64 символа.

Если вы хотите что-то случайное, вам нужно иметь более 4 символов (slice(0, 4).

...