5

Webページの一意のURLを生成するためにcrc32を理解しようとしています。

crc32 を使用する場合、重複を避けるために使用できる URL の最大数はいくつですか?

チェックサムを 2^32 に維持するためのおおよその文字列の長さは?

URL の UUID を試し、uuid バイトを base 64 に変換すると、22 文字の長さに減らすことができました。もっと減らせるかな。

ほとんどの場合、URL (最大 1024 文字) を短縮 ID に変換したいと考えています。

4

6 に答える 6

2

短い URL を作成する正しい方法は、完全な URL をデータベースに保存し、行インデックスにマップするものを公開することです。コンパクトな方法は、たとえば、行 ID の Base64 を使用することです。または、主キーに UID を使用してそれを表示することもできます。

チェックサムは小さすぎて競合する可能性が非常に高いため、使用しないでください。暗号化ハッシュはより大きく、可能性は低くなりますが、それでも正しい方法ではありません。

于 2009-09-09T18:36:24.413 に答える
0

いいえ、md5 やその他のチェックサムを使用していても、URL が重複している可能性があります。運次第です。

したがって、これらのチェックサムに基づいて一意の URL を作成しないでください

于 2009-09-09T18:27:37.323 に答える
-1

物事を解決する最も迅速な (そしておそらく最良の!) 方法は、次のように、ローカル パスのハッシュと特定の URI のクエリを使用することです。

using System;

namespace HashSample
{
    class Program
    {
        static void Main(string[] args)
        {
            Uri uri = new Uri(
                "http://host.com/folder/file.jpg?code=ABC123");

            string hash = GetPathAndQueryHash(uri);

            Console.WriteLine(hash);
        }

        public static string GetPathAndQueryHash(Uri uri)
        {
            return uri.PathAndQuery.GetHashCode().ToString();
        }
    }
}

上記は、URI スキームとホストが同じままであることを前提としています。そうでない場合、GetHashCode は任意の文字列で機能します。

CRC32 ハッシュ衝突に関する詳細な議論については、http: //episteme.arstechnica.com/eve/forums/a/tpc/f/6330927813/m/821008399831をご覧ください。

于 2009-09-09T18:45:42.320 に答える