Как сделать семя Голанга более сильным - PullRequest
0 голосов
/ 03 мая 2019

Я буду видеть, как люди используют этот метод для случайного начального инициата для Go, чтобы сделать случайным!

func init() {
    rand.Seed(time.Now().UTC().UnixNano())
}

Я на 100% уверен, что этот метод небезопасен, угадайте time.Now().UTC().UnixNano() 1000X> просто, тогда найдите реальный сгенерированный случайный пароль

Есть ли у кого-нибудь идея, также вызывать windows api для генерации случайного начального числа, я думаю, это хорошая идея?

1 Ответ

2 голосов
/ 03 мая 2019

Если безопасность важна для начала, то вам нужно «сбросить» math/rand и использовать crypto/rand на первом месте.

Если безопасность«не» важно, тогда посев с time.Now().UnixNano() вполне подойдет.(Обратите внимание, что нет необходимости вызывать Time.UTC(), поскольку Time.UnixNano() возвращает время Unix, указанное в UTC.)

Обратите внимание, что есть2592000000000000 наносекунд за 24 часа, поэтому, даже если день известен, теоретически существует 2,592 * 10 15 различных комбинаций семян, что вполне достаточно для небезопасных сценариев.

rand.Seed() предназначен для заполнения глобального Rand пакета math/rand.Вам не нужно (вы не можете) заполнять пакет crypto/rand.

Просмотреть возможный дубликат: Создать случайную строку БЕЗ времени?

См. Связанные вопросы:

Создание произвольного байтового массива фиксированной длины в Go

Как получить выборку случайных чисел в golang?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...