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?
Ответы
Ответ 1
Использование хэша для уникальной идентификации ресурса позволяет вам генерировать "уникальную" ссылку с объекта. Например, Git использует SHA-хеширование для создания уникального хэша, который представляет собой точный набор изменений для одного коммита. Поскольку хеширование является детерминированным, вы будете получать один и тот же хэш для одного и того же файла каждый раз.
Два человека во всем мире могли бы сделать одно и то же изменение в одном и том же репо независимо друг от друга, и Git знал бы, что они сделали то же самое изменение. UUID v1, v2 и v4 не могут поддерживать это, поскольку они не имеют никакого отношения к файлу или содержимому файла.
Ответ 2
Ну, иногда вам нужны столкновения. Если кто-то загружает одно и то же точное изображение дважды, возможно, вы скорее скажете им, что это дубликат, а не просто введите другую копию с новым именем.
Ответ 3
Одна из возможных причин состоит в том, что вы хотите, чтобы уникальная строка была удобочитаемой. UUID просто нелегко читать.
Ответ 4
uuids длинны и бессмысленны (например, если вы заказываете uuid, вы получаете бессмысленный результат).
И, поскольку он слишком длинный, я бы не хотел помещать его в URL-адрес или показывать его пользователю в любой форме или форме.
Ответ 5
В дополнение к другим ответам хеши действительно хороши для вещей, которые должны быть неизменными. Имя уникально и может использоваться для проверки целостности того, к чему он прикреплен в любое время.
Ответ 6
Также обратите внимание на другие типы UUID. Например, если вы хотите, чтобы ваш идентификатор был упорядоченным, UUID1 частично основан на отметке времени. Все это действительно касается ваших требований к приложениям...