Не используйте пакет math/rand для генерации ключей, даже одноразовых. Без заданного семени, генератор полностью предсказуем. Заданный с семенем time.Nanoseconds(), присутствует всего несколько бит энтропии. Вместо этого используйте crypto/rand Reader, и если вам нужен текст, напечатайте в шестнадцатеричной или base64 кодировке:
import (
"crypto/rand"
// "encoding/base64"
// "encoding/hex"
"fmt"
)
func Key() string {
buf := make([]byte, 16)
_, err := rand.Read(buf)
if err != nil {
// потеря случайности, никогда не должна произойти
panic(err)
}
return fmt.Sprintf("%x", buf)
// or hex.EncodeToString(buf)
// or base64.StdEncoding.EncodeToString(buf)
}
Читайте также:
Комментариев нет:
Отправить комментарий