2009-02-12 153 views
1

我需要生成一個隨機的字母/數字給用戶他們來到網站進入。我不太瞭解隨機數字等,我知道有播種問題等,但我不確定它們是什麼。mysql隨機生成的值

所以,我用這個:

選擇字符串(MD5(CONCAT_WS( ' - ',MD5(username_usr), MD5(zip_usr),MD5(id_usr), MD5(created_usr))) ,-12)from users_usr

這是安全嗎?我使用concat_ws,因爲有時zip是空的,但其他的從來都不是。

是的,我知道這有點短,但是1.他們必須輸入他們社交的最後4個,2.這是1次使用,3.沒有私人數據顯示在應用程序中,4.我可能會使用驗證碼,但由於沒有私人數據,這可能是矯枉過正。

感謝

回答

4

如果你需要一個隨機的字母數字值,爲什麼你使用這麼多的變量?像下面這樣的東西應該是完全不夠的:使用UUID(),我認爲這是一個好主意

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

作爲文檔說:雖然UUID()值打算是獨一無二的,它們不一定是難以猜測的或不可預測的。如果需要不可預測性,UUID值應該以其他方式生成....這個解決方案在我看來好得多,你可以做一些事情,比如`update tablename set uuid = md5(rand()+ id);` – wdog 2015-12-10 14:54:10

0

有人在這個問題上的刪除重複的建議。我認爲使用MD5(RAND())也沒有什麼大問題。

你必須存儲這些,當然,你不需要做你的例子。

+0

改變了我的想法幾次;) – Anonymous 2009-02-12 15:33:29

1

它有助於瞭解「隨機」字符串的用途。這不是隨機的 - 它是可重複的 - 並且相當容易重複。您不會以容易逆轉的方式暴露任何敏感信息,但我猜測您確實在尋找一種生成UUID(獨一無二的唯一ID)的方法。並非巧合的是,最近的MySQL版本有一個稱爲UUID的功能。

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

這可能會更好地解決你要解決的問題。如果你真的想要一個隨機數(順便說一句肯定會碰到),不要擔心播種。如果你沒有指定種子,它會以一種可能比無論如何看到的更好的方式自我種子。然後,您可以將該隨機數(或一系列隨機數)映射到一個字符(可能通過將整數轉換爲字符),然後重複該操作,直到您有足夠長的字符串。但值得重申的是一個隨機數不保證唯一的號碼......

0
>>SELECT md5(RAND()+CURRENT_TIMESTAMP())