[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 언어 공식 문서