我需要获取用户的电子邮件地址并以某种方式操纵该值以提供自动生成的密码。我想确保每当用户需要检索密码时我都可以重新创建相同的密码。
有没有一种标准的方法可以做到这一点?这是一个“哈希”是什么?如果有人能指出我正确的方向,我将非常感激! :)一旦我知道在哪里看,我可以自己做研究。
谢谢!
阳光
答案 0 :(得分:3)
是的,这就是“哈希”。但是,我强烈建议不要采用这种方法,因为这意味着擅长加密分析的人可能会通过了解他们的电子邮件地址为系统中的任何用户生成密码。
在您建议的情况下,标准做法是在忘记密码时使用新的随机密码重置用户密码。这使得他们之前的密码“安全”,以便有人碰巧用他们的密码截取电子邮件,它只包含一个随机密码而不是用户很可能用于他们登录的其他网站的密码。
重置密码后,应鼓励用户在首次登录时更改密码。
答案 1 :(得分:1)
散列函数确实可以完成您正在寻找的内容 - 它需要一些输入x并生成一个摘要d,只要再次输入x,它就会相同。
better definition from wikipedia,解释了这个属性:
<强>确定性强>
散列过程必须是确定性的 - 意味着对于给定的输入值,它必须始终生成相同的散列值。换句话说,它必须是散列数据的函数,在术语的数学意义上。此要求不包括依赖于外部变量参数的散列函数,例如依赖于一天中的时间的伪随机数生成器。它还排除了依赖于被散列对象的内存地址的函数,如果该地址可能在处理期间发生变化(可能在使用某些垃圾收集方法的系统中发生),尽管有时可以对项目进行重新整理。
但是,如果这是用于密码检索,我会建议不要这样做。相反,我建议向他们发送重置密码的链接,然后让他们重置密码。
答案 2 :(得分:1)
如果您正在使用某种密码重置系统,您应该只是随机生成他们的电子邮件密码,而不是强迫他们在初次登录时更改密码。如果他们需要在其他时间重置密码,那么他们可以再次通过相同的过程。
答案 3 :(得分:1)
PHP中的md5函数之类的东西是一个很好的起点。但是,如果用户丢失密码,为什么还需要重新创建相同的自动生成密码?就个人而言,生成一个新的随机数会更有意义。
答案 4 :(得分:1)
哈希就像一个指纹。如果您具有原始值(例如密码),则可以获取指纹并与数据库中的指纹进行比较。但是使用数据库中的指纹,您无法重新创建原始值(您无法通过指纹创建人体)。
这似乎是你想要的。但即便如此,它可能不是你所需要的。从电子邮件地址的哈希值生成密码意味着任何知道如何散列您的电子邮件地址的人都可能知道每个密码。
如果您正在寻找密码恢复系统,则应使用Self-service password reset系统。