>백엔드 개발 >Golang >Go에서 안전한 무작위 정수와 토큰을 생성하는 방법은 무엇입니까?

Go에서 안전한 무작위 정수와 토큰을 생성하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-12 21:43:02234검색

How to Generate Secure Random Integers and Tokens in Go?

"crypto/rand"를 사용한 안전한 무작위 정수 생성

Go에서 안전한 무작위 정수 생성은 다양한 암호화 애플리케이션에서 중요한 작업입니다. "crypto/rand" 패키지는 이를 안전하게 수행하기 위한 메커니즘을 제공합니다.

"crypto/rand" 패키지를 사용하여 0에서 27 사이의 임의의 정수를 생성하려면 다음 기능을 활용할 수 있습니다.

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

이 함수에는 두 개의 인수가 필요합니다:

  • rand: 무작위 데이터 생성을 위한 crypto/rand.Reader와 같은 io.Reader.
  • max: 무작위 정수의 상한을 나타내는 big.Int.

0에서 27 사이의 임의의 정수를 생성하려면 다음을 사용하세요. 코드:

nBig, err := rand.Int(rand.Reader, big.NewInt(27))
if err != nil {
    panic(err)
}
n := nBig.Int64()

암호화 토큰 생성

보안 토큰을 생성하기 위한 더 나은 접근 방식은 "encoding/base32" 패키지를 사용하여 임의 바이트 슬라이스를 생성하고 base32 인코딩을 사용하여 문자열로 변환합니다. 예는 다음과 같습니다.

package main

import (
    "crypto/rand"
    "encoding/base32"
    "fmt"
)

func main() {
    randomBytes := make([]byte, 32)
    _, err := rand.Read(randomBytes)
    if err != nil {
        panic(err)
    }
    token := base32.StdEncoding.EncodeToString(randomBytes)[:27] // Adjust length as needed
    fmt.Println("Here is a random token: ", token)
}

이 접근 방식은 암호화된 보안 난수 생성기를 활용하고 결과를 base32 인코딩을 사용하여 문자열로 변환하므로 토큰 생성에 안전한 것으로 간주되어 출력 토큰이 예측 불가능하고 어렵습니다. 추측해 보세요.

위 내용은 Go에서 안전한 무작위 정수와 토큰을 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.