ホームページ  >  記事  >  バックエンド開発  >  PHP ハッシュでコンパクトな URL を生成できますか?

PHP ハッシュでコンパクトな URL を生成できますか?

DDD
DDDオリジナル
2024-10-19 12:14:29513ブラウズ

Can PHP Hashing Generate Compact URLs?

PHP ハッシュによるコンパクトな URL の生成

TinyURL のような URL 短縮サービスは、長い URL をより短く管理しやすい文字列に効果的に圧縮します。これらのサービスは、この目標を達成するためにハッシュ技術を採用しています。

ただし、TinyURL の Base 36 整数エンコーディングとは異なり、真のハッシュを作成する PHP 関数がこの議論の焦点になります。目標は、8 文字以下のハッシュを生成することです。

URL 短縮のためのハッシュについて理解する

ハッシュは、可変長の入力を変換する数学的演算です。ハッシュと呼ばれる固定長の文字列に変換します。出力は特定の入力に対して一意であり、元に戻せないため、データ セキュリティと URL 短縮に適しています。

PHP 実装

次の PHP 関数を、 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>

この関数は入力文字列を受け取り、8 文字の 16 進数のハッシュを生成します。結果のハッシュは、適切なデータベースと組み合わせて短縮 URL 識別子として使用できます。

以上がPHP ハッシュでコンパクトな URL を生成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。