Случайные байты и кодировки - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть функция, которая нуждается в случайной последовательности байтов в качестве ввода (например, соль для хэширования пароля).Я генерирую эту строку, используя функцию CSPRNG, а затем кодирую в base64.
Теперь я передаю эту строку функции, которая нуждается в ней, но эта функция работает с байтами, поэтому, если она получает строку, она превращает ее в байт.буфер, читая строку как utf8.Строка, заданная в качестве входных данных, не является той же последовательностью байтов, сгенерированной функцией CSPRNG, но является декодированной строкой utf8 случайных байтов, закодированных в base64.Поэтому, если я сгенерирую N байтов, преобразования с кодировками превратят его в 4/3 * N байтов.Могу ли я предположить, что эти расширенные байты все еще случайны после преобразований?Есть ли какие-либо последствия для безопасности?

Вот псевдокод, чтобы сделать его более понятным:

function needsRandBytes(rand) {
  if (typeof rand == 'string') {
    rand = Buffer.from(rand, 'utf8'); // here's the expansion
  }

  // use the rand bytes...
}

randBytes = generateRandomBytes(N); // cryptographically secure function
randString = randBytes.toString('base64');

needsRandBytes(randString);
...