PHP5 эффективная генерация хешей с минимальным (нет) шансом коллизии - PullRequest
0 голосов
/ 17 февраля 2011

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

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

По моим критериям, процесс генерации будет

  • быстро
  • выдает одно и то же значение при одинаковых входных данных для разных серверов / сред / версий php
  • и почти нет шансов столкновения (поскольку это будет катастрофически) при большом количестве входных данных.

Я не уверен, подойдет ли мое обычное оружие, sha1 / 2, этому критерию, поэтому я кланяюсь этим лучшим стихам в этих вопросах. Лучше безопасно, чем потом сожалеть.

Ответы [ 3 ]

5 голосов
/ 17 февраля 2011

Если ваши имена пользователей уникальны, то почему бы вам не использовать их напрямую, а не пытаться сгенерировать какой-то хэш?

  • Они уже гарантированно будут уникальными.
  • Их можно использовать как есть. Никакой дополнительной обработки не требуется.
  • Они (вероятно, в среднем) будут меньше, чем соответствующий хэш SHA1.
2 голосов
/ 17 февраля 2011

SHA2 (или даже SHA1 / MD5) действительно подходит - если бы была какая-либо вероятность инженерных (или даже случайных) столкновений, мы бы не использовали ее.Однако обратите внимание, что пользователи могут захотеть изменить свои данные, например почтовый индекс или даже имя (жениться / развестись ...).

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

1 голос
/ 17 февраля 2011

Кажется, нет ничего плохого в sha1 для того, что вы хотите.Если коллизии являются проблемой, то, согласно вики, у sha2 еще не было коллизий.

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

также, чем больше / сложнее хэш, тем дольше он обычно занимает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...