28

アップロードされた画像名やセッションIDなど、一意の文字列生成の実装をいくつかやめたようです。それらの多くは、SHA1などのハッシュを使用しています。

私はこのようなカスタムメソッドを使用することの正当性に疑問を投げかけているのではなく、むしろその理由に疑問を投げかけています。一意の文字列が必要な場合は、次のように言います。

>>> import uuid
>>> uuid.uuid4()
UUID('07033084-5cfd-4812-90a4-e4d24ffb6e3d')

そして、私はそれで終わりました。uuidを読む前はあまり信頼していなかったので、次のようにしました。

>>> import uuid
>>> s = set()
>>> for i in range(5000000):  # That's 5 million!
>>>     s.add(str(uuid.uuid4()))
...
...
>>> len(s)
5000000

リピーターは1人ではありません(オッズが1.108e + 50のようなものであることを考えると、今は期待していませんが、実際に動作しているのを見るのは快適です)。2秒を組み合わせて弦を作るだけでオッズを半分にすることもできますuuid4()

それで、なぜ人々はランダムな文字列などのためにrandom()や他のものに時間を費やすのですか?uuidに関して重要なセキュリティ問題またはその他がありますか?

4

6 に答える 6

20

ハッシュを使用してリソースを一意に識別すると、オブジェクトから「一意の」参照を生成できます。たとえば、GitはSHAハッシュを使用して、単一のコミットの正確な変更セットを表す一意のハッシュを作成します。ハッシュは決定論的であるため、毎回同じファイルに対して同じハッシュを取得します。

世界中の2人が同じリポジトリに独立して同じ変更を加えることができ、Gitは彼らが同じ変更を行ったことを知っています。UUID v1、v2、およびv4は、ファイルまたはファイルの内容とは関係がないため、これをサポートできません。

于 2012-09-10T22:12:33.560 に答える
12

まあ、時々あなたは衝突が欲しいです。誰かが同じ正確な画像を2回アップロードした場合、新しい名前で別のコピーを作成するのではなく、複製であると伝えたい場合があります。

于 2010-03-12T18:38:06.697 に答える
6

考えられる理由の1つは、一意の文字列を人間が読める形式にすることです。UUIDは読みやすいものではありません。

于 2010-03-12T18:37:43.750 に答える
3

uuidは長く、意味がありません(たとえば、uuidで注文すると、意味のない結果が得られます)。

また、長すぎるため、URLに入れたり、何らかの形や形式でユーザーに公開したりしたくありません。

于 2010-03-12T18:41:50.360 に答える
1

他の答えに加えて、ハッシュは不変でなければならないものに本当に適しています。この名前は一意であり、いつでも付けられているものの整合性をチェックするために使用できます。

于 2014-10-24T20:34:15.180 に答える
1

また、他の種類のUUIDも適切である可能性があることに注意してください。たとえば、識別子を注文可能にする場合、UUID1は部分的にタイムスタンプに基づいています。それは本当にあなたのアプリケーション要件についてです...

于 2016-02-01T19:15:43.740 に答える