Подтвердить что ты не робот

Python. Зачем использовать что-либо другое, кроме uuid4() для уникальных строк?

Я вижу выход из нескольких реализаций уникальной генерации строк для таких вещей, как имена загруженных изображений, идентификаторы сеансов и т.д., и многие из них используют использование хешей, таких как SHA1 или другие.

Я не стану сомневаться в легитимности использования настраиваемых методов, подобных этому, а скорее по причине. Если я хочу уникальную строку, я просто говорю это:

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

И я покончил с этим. Я не очень доверял, прежде чем я прочитал о uuid, поэтому я сделал это:

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

Не один ретранслятор (я бы не ожидал, что теперь рассматривают шансы, как 1.108e + 50, но это приятно видеть в действии). Вы даже можете сделать половину шанса, просто сделав свою строку, объединив 2 uuid4() s.

Итак, с учетом сказанного, почему люди тратят время на случайные() и другие вещи для уникальных строк и т.д.? Есть ли важная проблема безопасности в отношении uuid?

4b9b3361

Ответ 1

Использование хэша для уникальной идентификации ресурса позволяет вам генерировать "уникальную" ссылку с объекта. Например, Git использует SHA-хеширование для создания уникального хэша, который представляет собой точный набор изменений для одного коммита. Поскольку хеширование является детерминированным, вы будете получать один и тот же хэш для одного и того же файла каждый раз.

Два человека во всем мире могли бы сделать одно и то же изменение в одном и том же репо независимо друг от друга, и Git знал бы, что они сделали то же самое изменение. UUID v1, v2 и v4 не могут поддерживать это, поскольку они не имеют никакого отношения к файлу или содержимому файла.

Ответ 2

Ну, иногда вам нужны столкновения. Если кто-то загружает одно и то же точное изображение дважды, возможно, вы скорее скажете им, что это дубликат, а не просто введите другую копию с новым именем.

Ответ 3

Одна из возможных причин состоит в том, что вы хотите, чтобы уникальная строка была удобочитаемой. UUID просто нелегко читать.

Ответ 4

uuids длинны и бессмысленны (например, если вы заказываете uuid, вы получаете бессмысленный результат).

И, поскольку он слишком длинный, я бы не хотел помещать его в URL-адрес или показывать его пользователю в любой форме или форме.

Ответ 5

В дополнение к другим ответам хеши действительно хороши для вещей, которые должны быть неизменными. Имя уникально и может использоваться для проверки целостности того, к чему он прикреплен в любое время.

Ответ 6

Также обратите внимание на другие типы UUID. Например, если вы хотите, чтобы ваш идентификатор был упорядоченным, UUID1 частично основан на отметке времени. Все это действительно касается ваших требований к приложениям...