3

私は ASP.NET で Web サイトを作成しており、末尾にユーザー ID を持つ URL 経由でアクセスできるユーザー プロファイルを作成したいと考えています。一意の識別子は明らかに長く、URL フレンドリーではない (間違っていれば訂正してください) ため、明らかに悪い選択です。

ASP ページで一意の識別子を生成し、CRC (または同様のもの) を使用してハッシュした場合、それが GUID と同じくらい一意である (またはまったく一意である) かどうか疑問に思っていました。

例えば:

GUID 6f1a7841-190b-4c7a-9f23-98709b6f8848 は、CRC E6DC2D44 と同じです。

ありがとう

4

9 に答える 9

11

GUID の CRC は一意ではありません。それ以外の場合は、すべてをわずか 4 バイトに収めることができる素晴らしい圧縮アルゴリズムになります。

また、ユーザーが GUID キーを使用してデータベースに保存されている場合、この特定の CRC に一致するユーザーを見つけるのは困難です。

ユーザーを一意に識別するために、単純な古い整数を使用する方がよいでしょう。URL を推測できないようにする場合は、ランダムに生成された 2 番目のチケット (またはトークン) パラメーターと組み合わせることができます。ユーザーを識別するために整数 ID を使用するため、一意である必要はありません。多かれ少なかれパスワードと考えることができます。

于 2009-07-26T12:33:29.697 に答える
3

計算されたハッシュには、元のデータよりも少ない情報 (ビット) が含まれているため、一意になることはありません。衝突は常にあります。

于 2009-07-26T12:33:12.910 に答える
2

ユーザーがユーザー名を持っている場合、それを使用しないのはなぜですか? 一意である必要があり (希望します!)、おそらく短く、URL フレンドリーである必要があります。また、ユーザーにとっても覚えやすく、ASP.NET メンバーシップ スキームに適合します (ユーザー名はメンバーシップ プロバイダーの「主キー」であるため)。とにかく、(おそらく)認証されたユーザーのみがアクセスできるため、セキュリティ上の問題は見られませんか?

于 2009-07-26T13:49:53.873 に答える
1

いいえ、そこから情報を失っているため、それほどユニークではありません. 32 文字の 16 進文字列を 8 文字の 16 進文字列に変換すると、定義上、データの 75% が失われます。

できることは、より多くの文字を使用してデータを表すことです。GUID は 16 文字 (ベース 16) しか使用しないため、より高いベース (ベース 64 など) を使用すると、同じ量の情報をより少ない文字数でエンコードできます。

于 2009-07-26T12:34:57.623 に答える
1

HTTP URL の通常の GUID に問題はありません。Guid の短縮形が必要な場合は、以下を使用してください。

var gid = Guid.NewGuid().ToString("N");

これにより、ハイフンや特殊文字を含まない GUID が得られます。

于 2009-07-26T12:40:01.260 に答える
1

GUID はグローバルに一意であるため、衝突が発生することはありません。これらは通常、ランダム性が挿入されたある種の時間ベースの計算に基づいています。CRCなどのハッシュを使用して何かを短縮したい場合、一意性は自動ではありませんが、一意性を自分で管理している限り(ハッシュが現在別のユーザーに割り当てられていないかどうかを確認し、そうであれば、まで再生成しますあなたはユニークなものを手に入れます)そして、あなたはほとんど何でも使うことができます.

これは、多くの短縮 URL が機能する方法です。

于 2009-07-26T13:03:38.880 に答える
0

GUID を 20 の印刷可能な ASCII 文字に短縮できますが、一意であり、情報を失うことはありません。

Jeff Atwood によるこのブログ投稿をご覧ください:
Equipping our ASCII Armor

于 2012-02-19T14:38:42.270 に答える
0

UUID/GUID の CRC を ID として使用する場合は、最初に短い ID を使用することもできます。

ID としての UUID/GUID の考え方は、切断されたシステムで ID を作成でき、ID の重複に問題がないという IMO です。

それにしても、プロフィールページのURLを手入力するのは一体誰なのでしょうか?

また、UUID/GUID の URL フレンドリ性に問題はありません。http で許可されていない文字はありません。

于 2009-07-26T12:33:21.303 に答える
0

データベース (またはデータの保存に使用するその他の場所) でユーザーはどのように識別されますか?

この GUID を使用して識別される場合、これには十分な理由があります。これにより、特別な ID の検索が非常に複雑になるためです (バイナリ ツリーを使用している場合でも)。また、これらの値を格納するためにより多くのスペースが必要です。

それらが一意の整数値で識別される場合、これを使用してユーザー プロファイルを呼び出してみませんか?

于 2009-07-26T12:41:45.487 に答える