PHP에서 무작위(random) 문자열을 생성해야 하는 상황은 매우 흔합니다. 임시 비밀번호, 인증 코드, 세션 토큰 등을 만들 때 랜덤 문자열이 자주 사용되는데요. PHP에서는 내장 함수들을 조합하여 별도의 라이브러리 없이도 손쉽게 랜덤 문자열을 만들 수 있습니다.
방법 1: md5()와 mt_rand() 조합
가장 간단한 방법은 mt_rand()로 정수 난수를 생성한 뒤, md5()로 해싱하고, substr()으로 원하는 길이만큼 잘라내는 것입니다.
<?php
$res = substr(md5(mt_rand()), 0,5);
echo "Displaying random string...\n";
echo $res;
?>
출력 결과
Displaying random string...
1c856
이 코드에서 각 함수의 역할은 다음과 같습니다.
- mt_rand() : Mersenne Twister 알고리즘을 기반으로 정수 난수를 생성합니다.
- md5() : 입력값을 32자리 16진수 해시 문자열로 변환합니다.
- substr(..., 0, 5) : 해시 문자열에서 앞 5글자만 추출하여 최종 랜덤 문자열을 만듭니다.
방법 2: random_bytes() 활용 (PHP 7 이상)
보안성이 중요한 용도라면 PHP 7부터 제공되는 random_bytes() 함수를 사용하는 것이 좋습니다. 이 함수는 암호학적으로 안전한(cryptographically secure) 난수를 생성하며, 이 값을 bin2hex()로 변환하면 16진수 형태의 랜덤 문자열을 얻을 수 있습니다.
<?php
$res = substr(md5(mt_rand()), 0,5);
echo "Displaying random string...\n";
echo $res;
echo "\nDisplaying another random string...\n";
$res2 = bin2hex(random_bytes(5));
echo $res2;
?>
출력 결과
Displaying random string...
a3541
Displaying another random string...
335b83d9e9
random_bytes(5)는 5바이트의 난수 데이터를 생성하고, bin2hex()가 이를 16진수 문자열로 변환하기 때문에 결과적으로 10글자의 랜덤 문자열이 만들어집니다.
정리
단순한 테스트나 임시 값 생성이라면 substr(md5(mt_rand()), 0, N) 방식으로 충분하지만, 보안 토큰이나 비밀번호처럼 예측 불가능성이 중요한 경우에는 반드시 random_bytes(), random_int() 같은 암호학적으로 안전한 함수를 사용하는 것이 권장됩니다. 상황에 맞는 방식을 선택하여 안전하고 효율적으로 랜덤 문자열을 활용해 보세요.