현재 위치: > 최신 기사 목록> [더 안전한 고유 ID를 생성하기 위해 Uniqid 및 MT_Rand 기능을 함께 사용하는 방법은 무엇입니까?

[더 안전한 고유 ID를 생성하기 위해 Uniqid 및 MT_Rand 기능을 함께 사용하는 방법은 무엇입니까?

gitbox 2025-07-26

Uniqid 함수

Uniqid 함수는 PHP의 내장 함수 중 하나이며 현재 시간을 기준으로 고유 ID를 생성하는 데 사용됩니다. 구문은 다음과 같습니다.

 <span><span><span class="hljs-title function_ invoke__">uniqid</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$prefix</span></span><span> = </span><span><span class="hljs-string">""</span></span><span>, </span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$more_entropy</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>
</span></span>
  • $ prefix : 생성 된 고유 ID에 접두사로 표시 될 선택적 문자열 매개 변수입니다.

  • $ more_entropy : 부울 값, 더 많은 임의의 문자를 생성 된 ID에 추가할지 여부를 결정하고 복잡성을 높이고 기본값을 거짓 으로 증가시킵니다.

Uniqid가 생성되는 방식은 정밀도가 높은 현재 타임 스탬프 (마이크로 초)를 기반으로하므로 생성 된 ID는 대부분의 경우 고유합니다. 예를 들어, uniqid ()를 호출하면 5f5d5e5c8f1a7 과 유사한 ID가 나타납니다.

결점:

Uniqid는 현재 시간에 따라 고유 한 값을 생성하지만 그다지 안전하지는 않습니다. 타임 스탬프는 순차적으로 성장하기 때문에 Uniqid가 동시에 여러 번 호출되면 생성 된 ID는 동일 할 수 있습니다. 또한 기본적으로 UniqID 에 의해 생성 된 ID는 타임 스탬프를 기반으로하므로 공격자가 타임 스탬프가 증가하는 순서를 예측할 수 있다면 생성 된 ID는 추측하기 쉽게됩니다.


mt_rand 기능

MT_RAND 는 PHP의 의사 랜덤 번호 생성기입니다. RAND 기능과 비교할 때 MT_RAND는 더 효율적이며 품질이 높습니다. 구문은 다음과 같습니다.

 <span><span><span class="hljs-title function_ invoke__">mt_rand</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$min</span></span><span> = PHP_INT_MIN, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$max</span></span><span> = PHP_INT_MAX): </span><span><span class="hljs-keyword">int</span></span><span>
</span></span>
  • $ min : 생성 된 랜덤 번호의 최소값은 기본값은 php_int_min 입니다.

  • $ max : 생성 된 랜덤 번호의 최대 값은 기본값은 php_int_max 입니다.

MT_RAND는 의사 랜덤 인 지정된 범위 내에서 임의의 정수를 반환하지만 일반적인 랜덤 숫자 요구 사항에는 충분합니다.

결점:

mt_rand 는 매우 무작위이지만 여전히 의사 무작위이며 암호화 적으로 안전한 임의의 숫자가 아닙니다. 생성 된 ID가 높은 보안이어야하는 경우 (예 : 추측 및 충돌 방지)는 충분히 안전하지 않을 수 있습니다.


UniqidMT_Rand를 사용하는 방법은 무엇입니까?

고유 한 ID 생성 보안을 향상시키기 위해 UniqidMT_Rand를 함께 사용할 수 있습니다. 이를 통해 생성 된 ID가 타임 스탬프에 임의성을 추가하여 충돌의 어려움을 향상시킵니다.

조합 방법 :

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">generateSecureId</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$prefix</span></span></span><span> = </span><span><span class="hljs-string">""</span></span><span>) {
    </span><span><span class="hljs-comment">// 고유 한 시간 기반을 생성합니다 ID</span></span><span>
    </span><span><span class="hljs-variable">$uniqid</span></span><span> = </span><span><span class="hljs-title function_ invoke__">uniqid</span></span><span>(</span><span><span class="hljs-variable">$prefix</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
    
    </span><span><span class="hljs-comment">// 유일한 ID 임의의 숫자를 추가하십시오</span></span><span>
    </span><span><span class="hljs-variable">$randomNumber</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mt_rand</span></span><span>(</span><span><span class="hljs-number">100000</span></span><span>, </span><span><span class="hljs-number">999999</span></span><span>);

    </span><span><span class="hljs-comment">// 스 플라이 싱에 의해 생성 된 독특한 ID 그리고 랜덤 숫자</span></span><span>
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$uniqid</span></span><span> . </span><span><span class="hljs-variable">$randomNumber</span></span><span>;
}
</span></span>

샘플 출력 :

 <span><span><span class="hljs-variable">$secureId</span></span><span> = </span><span><span class="hljs-title function_ invoke__">generateSecureId</span></span><span>(</span><span><span class="hljs-string">"order_"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$secureId</span></span><span>;
</span></span>

출력은 다음과 같습니다.

 <span><span>order_60d17e5c5f1b4.829278031116635204001234
</span></span>

위의 방법에서, Uniqid 함수는 시간을 기준으로 고유 한 부분을 생성하는 반면, mt_rand는 고품질 의사 랜덤 번호를 추가합니다. 결합 된 ID는 예측하기가 더 어렵 기 때문에 타임 스탬프의 독창성을 보장 할뿐만 아니라 동시에 여러 동일한 ID를 생성하는 문제를 피합니다.


UniqidMT_Rand 의 조합이 필요한 이유는 무엇입니까?

  1. 무작위성 증가 : 타임 스탬프를 기반으로 UniqID 에 의해 생성 된 ID는 특정 순서가 있으며 공격자가 추측 할 수 있습니다. mt_rand 에 의해 생성 된 랜덤 숫자는 예측 불가능 성을 증가시켜 ID를 추측하기가 더 어려워집니다.

  2. 충돌 방지 : ID 생성 사이의 시차가 매우 작 으면 충돌이 발생할 수 있습니다 (즉, 생성 된 ID는 동일). MT_RAND 의 도입은 임의의 요소를 추가하고 충돌 가능성을 효과적으로 줄입니다.

  3. 보안 향상 : 일부 시나리오 (지불 시스템, 사용자 확인 등)에서 ID에는 민감한 정보가 포함되거나 추측을 방지해야 할 수도 있습니다. Uniqid 에만 의존하는 경우 보안 위험이있을 수 있으며 MT_RAND 랜덤 숫자를 추가 한 후에도 생성 된 ID가 더 예측할 수 없습니다.