PHP:
난수 생성

어떻게:

PHP는 무작위 숫자를 생성하기 위한 여러 함수를 제공하지만, 가장 일반적으로 사용되는 것은 rand(), mt_rand(), 그리고 암호화 목적을 위한 random_int()입니다.

rand()에 의해 반환되는 가장 큰 가능한 값인 getrandmax()와 0 사이의 간단한 무작위 숫자를 생성하려면 다음을 사용할 수 있습니다:

echo rand();

예를 들어 1부터 100 사이와 같은 더 구체적인 범위의 경우:

echo rand(1, 100);

그러나 속도와 무작위성 측면에서 mt_rand()가 더 나은 선택입니다:

echo mt_rand(1, 100);

출력은 무작위화에 따라 1부터 100 사이의 어떤 것이 될 수 있으며, 예를 들어 42일 수 있습니다.

암호화나 보안 문맥에서 예측할 수 없음이 중요한 경우, 시스템의 무작위 수 생성기에서 무작위 바이트를 사용하여 암호학적으로 안전한 의사-무작위 정수를 생성하는 random_int()가 선호되는 선택입니다:

echo random_int(1, 100);

다시 말하지만 출력은 84와 같이 1부터 100 사이의 무작위 숫자이지만, 무작위성의 강력한 보장이 있습니다.

자세히 살펴보기

rand() 함수는 PHP 초기 버전부터 존재해 왔으며, 무작위 숫자를 생성하기 위한 초기 접근 방식으로 사용되었습니다. 그러나 상대적으로 예측 가능한 알고리즘 때문에 높은 수준의 무작위성을 요구하는 응용 프로그램에는 최선의 선택이 아닙니다.

PHP 4에 도입된 mt_rand()는 메르센 트위스터 알고리즘을 기반으로 하며, rand()에 비해 속도와 생성할 수 있는 무작위성 측면에서 훨씬 우수합니다. 빠르게 대부분의 비암호화 요구 사항에 대한 선호되는 옵션이 되었습니다.

보안에 민감한 응용 프로그램의 경우, PHP 7에서 시스템의 무작위 수 생성기에서 무작위 바이트를 사용하여 암호학적으로 안전한 의사-무작위 정수를 생성하는 random_int()가 도입되었습니다. rand()mt_rand()보다 훨씬 더 안전하며, 예측 가능성이 보안 취약점으로 이어질 수 있는 토큰, 키 또는 다른 요소를 생성하는 데 최선의 선택입니다.

이러한 개선에도 불구하고, 애플리케이션의 맥락에 맞는 올바른 기능을 선택하는 것이 중요합니다. 일반적인 사용을 위해서는 mt_rand()가 충분하지만, 목표로 삼거나 악용될 수 있는 것에 대해서는 보안과 무작위성을 모두 제공하는 random_int()이 가는 길입니다.