Spec-Zone.ru › Go

Пакет rand

  • import "crypto/rand"
  • Обзор
  • Указатель
  • Примеры

Обзор

Пакет rand реализует криптографически стойкий генератор случайных чисел.

Указатель

  • Переменные
  • func Int(rand io.Reader, max *big.Int) (n *big.Int, err error)
  • func Prime(r io.Reader, bits int) (*big.Int, error)
  • func Read(b []byte) (n int, err error)
  • func Text() string

Примеры

Int
Prime
Read
Text

Файлы пакета

rand.go text.go util.go

Переменные

Reader — это глобальный общий экземпляр криптографически стойкого генератора случайных чисел. Его можно безопасно использовать одновременно из нескольких горутин.

  • В Linux, FreeBSD, Dragonfly и Solaris Reader использует getrandom(2).
  • В устаревших версиях Linux (< 3.17) при первом использовании Reader открывает /dev/urandom.
  • В macOS, iOS и OpenBSD Reader использует arc4random_buf(3).
  • В NetBSD Reader использует системный вызов kern.arandom sysctl.
  • В Windows Reader использует API ProcessPrng.
  • В js/wasm Reader использует Web Crypto API.
  • В wasip1/wasm Reader использует random_get.

В режиме FIPS 140-3 выходные данные проходят через детерминированный генератор случайных битов (DRBG) согласно SP 800-90A Rev. 1.

var Reader io.Reader = rand.Reader

func Int

func Int(rand io.Reader, max *big.Int) (n *big.Int, err error)

Int возвращает равномерно распределённое случайное значение из диапазона [0, max). Функция вызывает панику, если max <= 0, и возвращает ошибку, если rand.Read возвращает ошибку.

Пример

ExampleInt выводит одно криптографически стойкое псевдослучайное число от 0 до 99 включительно.

Код:

// Int cannot return an error when using rand.Reader.
a, _ := rand.Int(rand.Reader, big.NewInt(100))
fmt.Println(a.Int64())

func Prime

func Prime(r io.Reader, bits int) (*big.Int, error)

Prime возвращает число заданной длины в битах, которое с высокой вероятностью является простым. Prime возвращает ошибку, если rand.Read возвращает ошибку или если bits < 2.

Начиная с Go 1.26 всегда используется защищённый источник случайных байтов, а Reader игнорируется, если не задано GODEBUG=cryptocustomrand=1. Эта настройка будет удалена в одном из будущих выпусков Go. Вместо неё используйте testing/cryptotest.SetGlobalRandom.

Пример

ExamplePrime выводит криптографически стойкое псевдослучайное простое 64-битное число.

Код:

// Prime cannot return an error when using rand.Reader and bits >= 2.
a, _ := rand.Prime(rand.Reader, 64)
fmt.Println(a.Int64())

func Read

func Read(b []byte) (n int, err error)

Read заполняет b криптографически стойкими случайными байтами. Функция никогда не возвращает ошибку и всегда заполняет весь срез b.

Read вызывает io.ReadFull для Reader и безвозвратно аварийно завершает программу, если возвращается ошибка. Стандартный Reader использует API операционной системы, которые, согласно документации, никогда не возвращают ошибку во всех системах, кроме устаревших версий Linux.

Пример

ExampleRead выводит криптографически стойкий псевдослучайный 32-байтовый ключ.

Код:

// Note that no error handling is necessary, as Read always succeeds.
key := make([]byte, 32)
rand.Read(key)
// The key can contain any byte value, print the key in hex.
fmt.Printf("% x\n", key)

func Text 1.24

func Text() string

Text возвращает криптографически случайную строку, используя стандартный алфавит base32 RFC 4648, для случаев, когда требуется секретная строка, токен, пароль или другой текст. Результат содержит не менее 128 бит случайности — этого достаточно, чтобы предотвратить атаки методом полного перебора и сделать вероятность коллизий исчезающе малой. В будущей версии длина текста может быть увеличена, чтобы сохранить эти свойства.

Пример

ExampleText выводит случайный ключ в кодировке base32.

Код:

key := rand.Text()
// The key is base32 and safe to display.
fmt.Println(key)

© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/crypto/rand/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API