Maison >développement back-end >tutoriel php >Le hachage PHP peut-il générer des URL compactes ?

Le hachage PHP peut-il générer des URL compactes ?

DDD
DDDoriginal
2024-10-19 12:14:29606parcourir

Can PHP Hashing Generate Compact URLs?

Génération d'URL compactes avec PHP Hashing

Les services de raccourcissement d'URL comme TinyURL condensent efficacement les URL longues en chaînes plus courtes et plus gérables. Ces services utilisent des techniques de hachage pour atteindre cet objectif.

Cependant, contrairement au codage entier base 36 de TinyURL, une fonction PHP qui crée un véritable hachage sera au centre de cette discussion. L'objectif est de générer un hachage ne dépassant pas 8 caractères.

Comprendre le hachage pour le raccourcissement d'URL

Le hachage est une opération mathématique qui transforme une entrée de longueur variable en une chaîne de longueur fixe appelée hachage. La sortie est unique pour une entrée donnée et irréversible, ce qui la rend adaptée à la sécurité des données et au raccourcissement d'URL.

Une implémentation PHP

Considérez la fonction PHP suivante basée sur le Algorithme MurmurHash3 :

<code class="php">function murmurHash3($data) {
    $nblocks = strlen($data) >> 2;
    $h1 = 0;
    $c1 = 0xcc9e2d51;
    $c2 = 0x1b873593;
    $r1 = 15;
    $r2 = 13;
    $m = 5;
    $k = 0;

    for ($i = 0; $i < $nblocks; $i++) {
        $k = $h1;
        $h1 = $h1 ^ (ord($data[$i*4+3]) << 24 | ord($data[$i*4+2]) << 16 | ord($data[$i*4+1]) << 8 | ord($data[$i*4]));
        $h1 = math_imul($h1, $c1);
        $h1 = ((($h1 << $r1) | ($h1 >> (32 - $r1))) ^ $m) & 0xffffffff;

        $k = mul($k, $c2);
        $k = ((($k << $r2) | ($k >> (32 - $r2))) ^ $m) & 0xffffffff;

        $h1 = ($h1 ^ $k) & 0xffffffff;
    }

    $tail = strlen($data) & 3;
    switch ($tail) {
        case 3: $h1 ^= ord($data[($nblocks << 2) + 2]) << 16;
        case 2: $h1 ^= ord($data[($nblocks << 2) + 1]) << 8;
        case 1: $h1 ^= ord($data[($nblocks << 2)]) & 0xff;
            $h1 = mul($h1, $c1);
            $h1 = ((($h1 << $r1) | ($h1 >> (32 - $r1))) ^ $m) & 0xffffffff;
    }

    return substr(base_convert($h1, 10, 16), 0, 8);
}</code>

Cette fonction prend une chaîne d'entrée et génère un hachage hexadécimal de 8 caractères. Le hachage résultant peut être utilisé comme identifiant d'URL court en conjonction avec une base de données appropriée.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn