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

DDD
Libérer: 2024-10-19 12:14:29
original
508 Les gens l'ont consulté

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!