3

生成された GUID を手動で変更して使用するのはどれほど悪いことですか? 衝突の可能性はまだ取るに足らないものですか、それとも GUID による操作は危険ですか?

以前に生成された GUID の一部の文字を変更して使用する場合があります。私たちはそれをやめるべきですか?

4

2 に答える 2

11

これは、GUID のバージョンと、変更する場所によって異なります。GUID が実際にどのように見えるかを少し分析してみましょう。

  1. GUID にはバージョンがあります。   GUID の 13 番目の 16 桁は、そのバージョンを示します。現在の GUID は通常、バージョン 4 で生成されます。バージョンを逆に変更すると、既存の GUID と衝突する危険があります。前方に変更すると、潜在的な将来の GUID と衝突する危険があります。

  2. GUID にもバリアントがあります。   GUID の 16 進数の 17 桁目はバリアント フィールドです。一部の値は下位互換性のために予約されており、1 つの値は将来の拡張用に予約されています。したがって、そこで何かを変更すると、以前に生成された GUID または将来生成される GUID と衝突する危険性があることを意味します。

  3. GUID は、バージョンによって構造が異なります。   バージョン 4 の GUID は (ほとんどの部分で - 17 番目の 16 桁を除いて) 真のランダムまたは擬似ランダム ビット (ほとんどの実装では擬似ランダム) を使用します。そこで何かを変更しても、衝突の可能性はほぼ同じままです。

    ハッシュを使用するバージョン 3 と 5 の GUID は非常に似ているはずですが、実際に見た覚えはありません。ただし、バージョン 1 と 2 ではそれほどではありません。それらには構造があり、どこを変更するかによって、物事が難しくなります。

  4. バージョン 1 の GUID には、タイムスタンプと、2 つの GUID が同じクロック間隔で生成された場合にインクリメントされるカウンター フィールドが含まれます (したがって、同じタイムスタンプになります)。タイムスタンプを変更すると、同じマシンで以前または後で生成された GUID と衝突する危険があります。カウンターを変更すると、同時に生成された GUID と衝突するリスクがあり、そのためカウンターを「一意識別子」として必要とします。

  5. バージョン 2 の GUID はバージョン 1 を拡張し、ユーザー ID も含みます。   タイムスタンプは精度が低く、ユーザー ID またはグループ ID が含まれていますが、カウンターの一部はどちらが意図されているかを示すために使用されます (ただし、生成マシンにとってのみ意味があります)。したがって、これらの部分を変更すると、同じマシン上の別のユーザーによって生成された GUID と衝突する危険があります。

  6. バージョン 1 および 2 の GUID には、MAC アドレスが含まれています。   具体的には、それらを生成したコンピューターの MAC アドレスです。これにより、まったく同じ瞬間に生成された場合でも、異なるマシンの GUID が異なることが保証されます。マシンに MAC アドレスがない場合はフォールバックがありますが、一意性は保証されません。MAC アドレスにも構造があり、「Organisationally Unique Identifier」(OUI; ローカルで管理されるか、IEEE によって配布される) とネットワーク カードの一意の識別子で構成されます。

    OUI を変更すると、他のメーカーのネットワーク カードを搭載したコンピュータで生成された GUID と衝突する危険があります。最初のオクテットの最下位から 2 番目のビットが 1 になるように変更しない限り、ローカルで管理される OUI に切り替えることになり、上書きされた MAC アドレス (仮想ネットワーク ハードウェアを備えたほとんどの VM が含まれます)。

    カード識別子を偶然に使用すると、コンピューター上で生成された GUID と、同じ製造元の他のネットワーク カード、または MAC アドレスが上書きされたものと衝突する危険があります。

No other versions exist so far but the gist is the following: A GUID needs all its parts to ensure uniqueness; if you change something you may end up with a GUID which isn't necessarily unique anymore. So you're probably making it more of a GID or something. The safest to change are probably the current version 4 GUIDs (which is what Windows and .NET will generate) as they don't really guarantee uniqueness but instead make it very, very unlikely.

Generally I'd say you're much better off generating a new GUID, though. This also helps the person reading them because you can tell two GUIDs apart as different easily if they look totally different. If they only differ in a single digit a person is likely to miss the change and assume the GUIDs to be the same.

Further reading:

于 2012-06-05T06:10:28.013 に答える
0

それが GUID の一意性にどのように影響するかはわかりませんが、おそらく良い考えではありません。

Visual Studio には組み込みの GUID ジェネレーターがあり、起動して新しい GUID を作成するのに数秒かかります。VS を使用しない場合は、新しいものを作成する簡単な方法が他にもあります。このページには、ジョブを実行する 2 つのスクリプト (VB スクリプトと PHP) があり、これは .net バージョンです。

于 2012-04-21T23:54:35.063 に答える