La fonction PHP existante pour générer des UUID v4 présente un défaut pour garantir le respect du format spécifique de la norme v4. La norme précise que le bit haut et les bits réservés du 9ème octet doivent être égaux à 10.
Le coupable est la gestion incohérente de ces bits par la fonction. Pour le corriger, des modifications spécifiques doivent être apportées conformément à la section 4.4 de la RFC 4122.
La fonction affinée ci-dessous implémente les ajustements nécessaires :
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)); }
Le les données sont générées à l'aide de random_bytes, garantissant le caractère aléatoire et la sécurité. La conversion hexadécimale suivante utilise vsprintf pour conserver le format approprié.
Pour les versions PHP antérieures à 7.0, où random_bytes n'est pas disponible, une implémentation alternative est fournie :
$data = openssl_random_pseudo_bytes(16, $strong); // ensure the result is cryptographically strong assert($data !== false && $strong);
Il est important d'utiliser des données aléatoires cryptographiquement fortes des générateurs comme random_bytes ou openssl_random_pseudo_bytes pour garantir la robustesse de vos UUID. Pensez à explorer des méthodes alternatives pour générer des données aléatoires si vous avez des exigences spécifiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!