使用RAND和MD5在MYSQL唯一字段中生成唯一密钥。可能?可以接受的做法?

twi*_*xel 5 php mysql random md5 unique

我正在尝试为我的网站实施一个简单的密码重置系统。这个想法是这样的:

  1. 用户请求密码重置链接。
  2. CodeIgniter系统通过MYSQL使用RAND和MD5(我知道它是不安全和损坏的,可能最好使用SHA1或更好的方式,不是重点),以生成随机字符串并将其哈希,从而生成32位密钥。
  3. 向用户发送包含密钥的链接。
  4. 其余的很明显。

我想知道是否-

答:MYSQL函数RAND带有MD5(或更高版本)的RAND将生成到设置为UNIQUE的字段中,如果它们恰好生成了该字段下表中已存在的键,则会自动重新生成。

B:这是生成密码重置链接的可接受方法。还是最好用一个盐对用户的电子邮件地址进行哈希处理以防止重复?

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

sym*_*ean 0

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