我需要生成一个随机的字母/数字,以便让用户进入网站进入。我不太了解随机数等等,我知道有播种问题等,但我不确定它们是什么。
所以,我用过这个:
选择substrING(md5(concat_ws(' - ',md5(username_usr), MD5(zip_usr),MD5(id_usr), 来自users_usr的MD5(created_usr))), - 12)
这样安全吗?我使用了concat_ws,因为有时zip是null,但其他的都不是。
是的,我知道这有点短,但是1.他们必须进入他们社交的最后4个,2。这是1次使用,3。申请中没有显示私人数据,4。我可能使用验证码,但由于没有私人数据,这可能有点过分。
感谢
答案 0 :(得分:5)
也许使用Universal Unique Identifier就足够了?只是为了保持简单?
答案 1 :(得分:4)
如果您需要随机字母数字值,为什么要使用这么多变量?像下面这样的东西应该足够了:
md5(rand())
--Flavor: MySql
答案 2 :(得分:1)
这有助于了解“随机”字符串的用途。这不是随机的 - 它是可重复的 - 而且相当容易重复。你不是以一种容易逆转的方式暴露任何敏感信息,但我猜你真的在寻找一种生成UUID(univeraslly unique ID)的方法。并非巧合,最近的MySQL版本有一个名为UUID的功能。
http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid
这可能会更好地解决您尝试解决的问题。如果你真的想要一个随机数(顺便说一句,肯定会有碰撞),不要担心播种。如果你没有指定一个种子,那么它将以一种可能比固定看到的方式更好的方式自我种子。然后,您可以将该随机数(或一系列随机数)映射到一个字符(可能通过将整数转换为字符),然后重复该字符,直到您有足够长的字符串为止。但值得重申的是,随机数不是保证的唯一数字......
答案 3 :(得分:0)
此问题的已删除副本中有人建议使用UUID()
,我认为这是一个好主意。我认为使用MD5(RAND())
也没有什么大不了的。
当然,您必须存储那些与您的示例无关的内容。
答案 4 :(得分:0)
>>SELECT md5(RAND()+CURRENT_TIMESTAMP())