Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP에서 랜덤 문자열을 생성하는 3가지 방법 (bin2hex, sha1, uniqid)

PHP로 웹 애플리케이션을 개발하다 보면 토큰 생성, 임시 비밀번호 발급, 세션 ID 생성 등 다양한 상황에서 랜덤 문자열이 필요합니다. 이 글에서는 PHP에서 무작위 문자열을 손쉽게 만들 수 있는 대표적인 세 가지 방법을 예제 코드와 함께 소개합니다.

1. bin2hex 함수와 random_bytes 활용하기

random_bytes() 함수는 암호학적으로 안전한(cryptographically secure) 난수 바이트를 생성하고, bin2hex() 함수는 이 바이트 데이터를 16진수(hexadecimal) 문자열로 변환해 줍니다. 두 함수를 조합하면 보안성이 높은 랜덤 문자열을 간단하게 얻을 수 있습니다.

예제 코드

<?php
$num = 12;
$res = bin2hex(random_bytes($num));
print_r("생성된 랜덤 문자열 : ");
echo $res;
?>

실행 결과

생성된 랜덤 문자열 : f1db16115fa93b98493d388b

위 예제에서는 원하는 바이트 길이인 12를 변수에 저장한 뒤, random_bytes(12)로 12바이트의 무작위 데이터를 만들고 이를 bin2hex()로 변환했습니다. 결과적으로 24자리의 16진수 랜덤 문자열이 출력됩니다. 참고로 출력되는 문자열의 길이는 지정한 바이트 수의 두 배가 됩니다.

2. 해싱 함수(sha1)를 이용한 방법

rand() 함수로 난수를 생성한 후, 이 값을 sha1() 같은 해싱 함수에 넣으면 고정된 길이의 랜덤 해시 문자열을 얻을 수 있습니다. SHA-1은 항상 40자리의 16진수 문자열을 반환합니다.

예제 코드

<?php
$my_str = rand();
$res = sha1($my_str);
print_r("sha1 해싱 함수로 생성한 랜덤 문자열 :");
echo $res;
?>

실행 결과

sha1 해싱 함수로 생성한 랜덤 문자열 :9a4a73c35ac034832332977f3d5accd8eace5260

먼저 rand() 함수를 호출해 무작위 숫자를 만들고, 그 숫자를 sha1() 해싱 함수에 전달하여 40자리 해시 문자열을 생성합니다. 더 강력한 보안이 필요하다면 md5() 대신 hash('sha256', ...)처럼 더 긴 해시 알고리즘을 사용하는 것도 좋은 선택입니다.

3. 내장 함수 uniqid 활용하기

uniqid() 함수는 현재 시간(마이크로초 단위)을 기반으로 고유한 식별자 문자열을 자동으로 생성해 줍니다. 별도의 매개변수 없이 호출만 하면 되기 때문에 가장 간편한 방법입니다.

예제 코드

<?php
$res = uniqid();
print_r("uniqid 함수로 생성한 랜덤 문자열 : ");
echo $res;
?>

실행 결과

uniqid 함수로 생성한 랜덤 문자열 : 5ed4b884cef34

uniqid()는 현재 타임스탬프를 기반으로 13자리의 고유 문자열을 반환합니다. 첫 번째 매개변수에 접두사(prefix)를 추가하거나, 두 번째 매개변수를 true로 설정하면 엔트로피(entropy)가 추가되어 더욱 무작위성이 높은 문자열을 얻을 수 있습니다. 다만 시간 기반 방식이므로 보안 목적의 토큰에는 random_bytes()를 사용하는 것이 권장됩니다.

마무리

정리하면 다음과 같습니다.

- 보안이 중요한 경우: bin2hex(random_bytes()) 조합이 가장 안전합니다.
- 고정 길이 해시가 필요한 경우: rand() + sha1() 또는 hash() 함수를 활용하세요.
- 간단한 고유 ID가 필요한 경우: uniqid()가 가장 편리합니다.

용도에 맞는 방법을 선택하면 PHP에서도 손쉽게 랜덤 문자열을 생성할 수 있습니다.