使用RAND和MD5在MYSQL唯一字段中生成唯一键.可能吗?可接受的做法


Using RAND with MD5 to generate unique key in MYSQL unique field. Possible? Acceptable practice?

我想为我的网站实现一个简单的密码重置系统。思路是这样的:

  1. 用户请求重置密码链接。
  2. CodeIgniter系统使用RAND和MD5(我知道它是不安全和破碎的,可能最好使用SHA1或更好的,而不是点)通过MYSQL生成一个随机字符串和哈希它,产生32位密钥。
  3. 向用户发送一个由密钥组成的链接。

我想知道是否-

A: MYSQL函数RAND与MD5(或更好的)被生成到一个字段设置为UNIQUE,如果他们碰巧生成一个已经存在于表中字段下的键,将自动重新生成。

B:这是生成密码重置链接的一种可接受的方法。还是用盐对用户的电子邮件地址进行散列以防止重复?

显然,这只是基本的实现和安全需求围绕着整个过程。

对简单的、可预测的值使用更复杂的散列没有多大意义。把电子邮件当作盐有帮助——但作用不大。如果您只需要一个随机值,那么为什么不使用一个随机值呢?用伪加密来修饰它并不能提高安全性(实际上会破坏安全性)。只需生成一个随机数(实际上,您可能希望生成几个随机数,转换为更紧凑的基数并连接)并将其与登录信息一起存储(无论如何,如果用户成功登录,您需要保留原始密码并取消解锁设置)。