[go] go 언어에서의 안전한 난수 생성 패턴
난수 생성은 많은 프로그램에서 중요한 요소입니다. 안전하고 예측 불가능한 난수를 생성하는 것은 보안 및 무결성을 유지하는 데 중요합니다. Go 언어는 안전한 난수 생성을 위한 다양한 기능을 제공합니다.
1. 초기화된 난수 생성기
Go 언어는 math/rand
패키지를 통해 초기화된 난수 생성기를 제공합니다. 아래의 예제 코드는 초기화된 난수 생성기를 사용하여 안전하고 예측 불가능한 난수를 생성하는 방법을 보여줍니다.
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
fmt.Println("Random number:", rand.Intn(100))
}
위의 코드에서 rand.Seed(time.Now().UnixNano())
를 통해 현재 시간을 시드로 활용하여 초기화된 난수 생성기를 만들고, rand.Intn(100)
을 통해 0부터 99까지의 임의의 정수를 생성합니다.
2. Cryptographically 안전한 난수 생성
암호학적으로 안전한 난수 생성이 필요한 경우 crypto/rand
패키지를 사용할 수 있습니다. 이 패키지는 math/rand
보다 더 안전하고 예측 불가능한 난수를 생성합니다.
아래의 예제 코드는 crypto/rand
패키지를 사용하여 Cryptographically 안전한 난수를 생성하는 방법을 보여줍니다.
package main
import (
"crypto/rand"
"fmt"
)
func main() {
var randomBytes [4]byte
_, err := rand.Read(randomBytes[:])
if err != nil {
panic(err)
}
fmt.Println("Cryptographically secure random number:", randomBytes)
}
위의 코드에서 rand.Read
를 통해 Cryptographically 안전한 난수를 생성합니다.
결론
Go 언어는 안전한 난수 생성을 위한 초기화된 난수 생성기 및 Cryptographically 안전한 난수 생성 기능을 제공하여 안전하고 예측 불가능한 난수를 쉽게 생성할 수 있습니다.
참고 자료: Go 언어 공식 문서, Go 언어 공식 문서