2015-05-11 1 views
-1

Скажем, мне нужно создать случайное имя пользователя для пользователя. Поэтому я сначала установил его как случайное число, сгенерированное с помощью функции. В следующем случае я установил имя пользователя в случайное число + временную метку. Какой случай имеет большую вероятность столкновения? Это даже разрешимо?Вероятность столкновения со случайным числом плюс отметка времени как имя пользователя

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

И самое главное, я не добавляю временную метку. Я скорее выполняю дополнение.

Чтобы подробнее разобрать, сделайте случайное число равным 105, а отметка времени - 106. Таким образом, имя пользователя будет равно 211. Позже метка времени будет большим числом, но все еще существует вероятность того, что во время метки 201 генерируется случайное число может быть 10, что делает его 211 снова.

ответ

0

Очевидно, чем больше символов у вас есть, тем менее вероятно, что у вас есть столкновение. Шанс столкновения будет 1/(# OfcharsInUsername^#ofpossiblecharacters поддерживается). Например, пароль с 5 символами, использующий только строчный алфавит, будет иметь вероятность столкновения 1/(5^26). Поскольку вы добавляете временную метку к имени пользователя, будет сложно встретить столкновение. Однако я вижу 3 потенциальных вопроса. Во-первых, вам нужно убедиться, что вы используете случайную функцию с временным управлением, или вы будете иметь одно и то же имя пользователя несколько раз. Во-вторых, если вы используете генератор случайных чисел с поданным временем, чем если вы одновременно создадите два имени пользователя, они будут точно такими же (даже если вы добавите время до конца). Последнее заключается в том, что если вы добавите временную метку в конец имени пользователя, это будет очень неприятно для людей, вводящих имя пользователя, поскольку временные метки имеют кучу двоеточий и другой мусор, связанный с ними. Я предлагаю вам искать другое решение, создавая смесь букв и цифр. Другим решением может быть захват определенного количества случайных чисел и использование их значений ascii для объединения имени пользователя. Переход от 21 до 126 даст вам все буквы нижнего и верхнего регистра, а также цифры и некоторые символы. Кроме того, это очень затруднит столкновение, потому что оно не будет отлично исполнено с другим паролем. Вероятность столкновения будет 1/(n^105), где n - количество символов.

+0

Спасибо, Боб. Но я не добавляю временную метку. Я выполняю добавление с меткой времени. Таким образом, это не обязательно приведет к увеличению числа символов. – user2040026

+0

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

Смежные вопросы