В PHP функция uniqid()
вычисляет свой результат на основе текущего времени.Это помогает гарантировать, что значения уникальны, потому что два раза не встречаются дважды, однако это не работает на нескольких серверах, поскольку основано исключительно на времени.Использование чего-либо, основанного на времени, плохо, потому что число различных значений, которые могут быть получены с помощью uniqid()
, очень ограничено.Предполагая, что PHP использовался в течение 25 лет, он рассчитывает на 7,89e + 14 микросекунд, которые прошли, и, следовательно, было бы получено такое же количество значений для uniqid()
.
Это очень большое числоОднако, если предположить, что мы можем получить действительно случайную соль, вероятность столкновения на самом деле намного меньше, чем при использовании uniqid()
.Возможные символы, которые можно использовать в качестве соли:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
Это означает, что мы можем использовать 64 различных символа для соли длиной 22 символа, что примерно равно 5,44e + 39 различных комбинаций.
Таким образом, при попытке сделать что-то уникальное, на самом деле оно на меньше уникально, чем было бы, если бы использовался случайный источник.