私はGUIDの使用を理解しようとしています。いつも疑問に思っているのは、自分のタイプの一意のIDをロールするのではなく、それらを使用することを検討する必要がある特別なものです。言葉、なぜ私は次のようなワールプールハッシュを使用できないのですか?
4bec4b25ff46e09f7d7adb5b4e6842f871d7e9670506d1a65af501cf96ddf194d0132b85e66c1baaeb5319f2030b607121aae2a038458d32b4d4b03dfd46d5ea
同じ理由で、GUID、MD5、またはSHA2の代わりに?
GUID仕様で制限される代わりに、ワールプールハッシュの部分文字列を使用して長さを調整し、衝突の確率を自分で計算することもできます。
まず、ハッシュ関数にはinputがあります。ハッシュsomethingです。 [〜#〜] guid [〜#〜] (実際には [〜#〜] uuid [〜#〜] )入力はありません。ハッシュ関数を使用して「一意の識別子」を生成するには、ハッシュ関数を使用しないでください。実際にハッシュするものを定義する必要があります。
UUIDを生成するには、いくつかの標準的な方法があります。これらのメソッドはすべて、生成された識別子の「一意性」を実現することを目的としています。方法3はMD5ハッシュ関数を使用します。つまり、すでに世界的に一意である(URLなど)一部のデータをハッシュしてUUIDを生成しますが、UUIDの16バイトよりも長くなります。この方法は、ハッシュするものを明確に定義することを除いて、提案するものと非常に似ています(または、少なくとも、ハッシュするときにsomethingをハッシュし、UUIDはより一意ではないことを平易な言葉で述べています)あなたがハッシュするもの)。方法5は方法3に似ていますが、MD5ではなくSHA-1を使用します(出力は128ビットに切り捨てられます)。
他の方法では、ローカルマシンの物理要素または構成要素を使用します(方法1のMACアドレスや現在の時刻など)。ほとんどの方法は「協調的」です。一意性を保証しますが、新しいUUID値を予測できます。多くのセキュリティ関連プロトコルでは、一意のIDが必要な場合、実際には以前のIDと衝突しない(または無視できる確率でのみ衝突する)IDが必要ですandは攻撃者によって予測できません。そのためには、「方法4」が必要です。128ビットのUUIDには、 暗号学的に強力なPRNG から生成された122のランダムビットが含まれています。 このメソッドは、「非常にユニークな」識別子を提供し、自家製の構造よりも優れています。
A GUIDは、ランダムに生成される一意の識別子であり、何かに割り当てられます。「ああ、あなたはとてもかわいいです。私はあなたをシャーロットと呼びます」(シャーロットだけがランダムです)。
MD5チェックサムは、誰でも識別できるオブジェクトにすでに固有のものです。 「ちょっと見て、このスケールによれば、シャーロットの体重は25ポンドです」。
UUIDは一部のサークルではGUIDと交換可能ですが、通常、UUIDにはベースシードがあります。
SHA-1はMD5と同様に非常に長いIDを生成しますが、出力の長さを事前に決定しないため、切り捨てられます。ちょっとpiのようですが、10位までです。
「GUIDと何かをハッシュする」ではなく、「GUIDと16進数の任意の長さの文字列を生成するその他の方法」についての質問だと思います。 (私の仮定が正しくない場合は、この回答を削除します)
本当に、それは標準についてです。この識別子の使用方法によっては、GUIDを文字列よりも格納する方が簡単で高速です。たとえば、ほとんどのデータベースシステムには、128として格納する特定のGUID/UUIDタイプがあります。文字ごとに格納される文字列ではなく、ビット数また、GUIDを処理するほとんどのシステムには、新しい文字列を生成するメカニズムがあり、任意のランダムな文字列にはありません。