2009-02-12 13 views
1

Мне нужно создать случайный альфа/число, чтобы дать пользователям, что они приходят на сайт для входа. Я не знаю много о случайных числах и т. Д., Я знаю, что есть проблемы с посевом и тому подобное, но я не уверен, что это такое.mysql произвольно сгенерированное значение

Итак, я использовал это:

выберите подстроку (md5 (CONCAT_WS ('-', md5 (username_usr), MD5 (zip_usr), MD5 (id_usr), MD5 (created_usr))) , -12) от пользователей_usr

Безопасно ли это? Я использовал concat_ws, потому что иногда zip имеет значение null, но другие никогда не бывают.

И да, я знаю, что это коротко, но 1. Им нужно ввести последние 4 своих социальных, 2. Это 1 раз, 3. Нет личных данных, отображаемых в приложении, и 4. I может использовать captcha, но поскольку нет личных данных, возможно, это слишком сложно.

БЛАГОДАРЯ

ответ

4

Если вам нужно случайное буквенно-цифровое значение, почему вы используете так много переменных? Что-то вроде следующего должно быть достаточно отлично:

md5(rand()) 
--Flavor: MySql 
+0

В документации сказано: Несмотря на то, UUID() значения предназначены быть уникальными, они не обязательно неопределяемых или непредсказуемы. Если непредсказуемость требуется, значения UUID должны генерироваться каким-то другим способом ... это решение намного лучше, на мой взгляд, вы можете сделать что-то вроде 'update tablename set uuid = md5 (rand() + id);' – wdog

0

Кто-то в удаленном дубликата этого вопроса предложил использовать UUID(), который я думаю, это хорошая идея. Я не думаю, что есть что-то очень плохое в использовании MD5(RAND()).

Вам, конечно, придется хранить те, что вам не нужно делать с вашим примером.

+0

Изменен мой разум несколько раз ;) – Anonymous

1

Это поможет узнать цель «случайной» строки. Это не случайность - она ​​повторяема и довольно легко повторяется. Вы не подвергаете какую-либо конфиденциальную информацию способом, который легко обратим, но я предполагаю, что вы действительно ищете способ создания UUID (уникальный уникальный идентификатор). Не случайно последние версии MySQL имеют функцию UUID.

http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid

Это может лучше решить проблему, которую вы пытаетесь решить. Если вы действительно хотите, чтобы случайное число (которое может определенно иметь коллизии, кстати) по какой-то причине, не беспокойтесь о посеве. Если вы не укажете семя, оно будет самозаниматься таким образом, что, вероятно, лучше, чем фиксированное. Затем вы сопоставили бы это случайное число (или ряд случайных чисел) с символом (возможно, выставив целое число в символ) и повторите это до тех пор, пока не получите строку символов достаточно долго. Но стоит повторить, что случайное число не является гарантированным уникальный номер ...

0
>>SELECT md5(RAND()+CURRENT_TIMESTAMP()) 
Смежные вопросы