Функция crypto/rand.Read
Функция crypto/rand.Read заполняет переданный ей слайс байтов
криптостойкими случайными данными, которые подходят для
использования в криптографических операциях, таких как генерация
ключей, создание nonce или инициализация векторов.
В отличие от обычного генератора псевдослучайных чисел,
данная функция использует источник энтропии операционной системы,
что обеспечивает непредсказуемость результатов.
В первый параметр мы передаем слайс байтов, который будет заполнен
случайными данными. Функция возвращает количество записанных байтов
и ошибку, если она возникла.
Синтаксис
rand.Read(b []byte) (n int, err error)
Пример
Давайте сгенерируем 16 случайных байтов:
package main
import (
"crypto/rand"
"fmt"
)
func main() {
b := make([]byte, 16)
_, err := rand.Read(b)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("%x\n", b)
}
Результат выполнения кода:
"4a7b3e5d8f2c1a9b6e4d8c2f5a7b3e1d"
Пример
Давайте заполним слайс байтов случайными данными и проверим, сколько байтов было записано:
package main
import (
"crypto/rand"
"fmt"
)
func main() {
buf := make([]byte, 32)
n, err := rand.Read(buf)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Printf("Written bytes: %d\n", n)
fmt.Printf("Data: %x\n", buf)
}
Результат выполнения кода:
"Written bytes: 32"
"Data: 8f2c1a9b6e4d8c2f5a7b3e1d4a7b3e5d8f2c1a9b6e4d8c2f5a7b3e1d4a7b3e5d"
Пример
Давайте сгенерируем случайные байты и преобразуем их в строку для использования в качестве токена:
package main
import (
"crypto/rand"
"encoding/base64"
"fmt"
)
func main() {
b := make([]byte, 32)
_, err := rand.Read(b)
if err != nil {
fmt.Println("Error:", err)
return
}
token := base64.StdEncoding.EncodeToString(b)
fmt.Println(token)
}
Результат выполнения кода:
"4a7b3e5d8f2c1a9b6e4d8c2f5a7b3e1d4a7b3e5d8f2c1a9b6e4d8c2f5a7b3e1d"
Смотрите также
-
функцию
crypto/rand.Int,
которая генерирует случайное большое целое число -
функцию
crypto/rand.Prime,
которая генерирует случайное простое число заданной длины -
пакет
crypto/rand,
который предоставляет функции для криптографической генерации случайных чисел -
пакет
crypto/subtle,
который предоставляет функции для безопасного сравнения данных