v4 UUID를 생성하는 PHP의 기존 함수에는 v4 표준의 특정 형식을 준수하는 데 결함이 있습니다. 표준에서는 9번째 옥텟의 상위 비트와 예약된 비트가 10이어야 한다고 규정합니다.
원인은 함수가 이러한 비트를 일관되지 않게 처리하는 데 있습니다. 이를 수정하려면 RFC 4122 섹션 4.4에 따라 특정 변경을 수행해야 합니다.
아래의 개선된 기능은 필요한 조정을 구현합니다.
function uuidv4() { $data = random_bytes(16); $data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0100 $data[8] = chr(ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10 return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)); }
데이터는 Random_bytes를 사용하여 생성되므로 무작위성과 보안이 보장됩니다. 후속 16진수 변환에서는 vsprintf를 활용하여 적절한 형식을 유지합니다.
random_bytes를 사용할 수 없는 PHP 7.0 이전 버전의 경우 대체 구현이 제공됩니다.
$data = openssl_random_pseudo_bytes(16, $strong); // ensure the result is cryptographically strong assert($data !== false && $strong);
암호화 방식을 사용하는 것이 중요합니다. UUID의 견고성을 보장하기 위해 Random_bytes 또는 openssl_random_pseudo_bytes와 같은 강력한 무작위 데이터 생성기를 사용합니다. 특정 요구 사항이 있는 경우 임의 데이터를 생성하기 위한 대체 방법을 고려해 보십시오.
위 내용은 PHP에서 유효한 V4 UUID를 생성하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!