2013-02-25 77 views
3

在测试我们的应用程序时,发现如果用户忘记密码,则没有功能进入应用程序。恢复密码生成

在发现这个时,我们实现了如下的密码生成技术 1.使用用户信息创建一个特定的字符串。 2.在字符串上应用SHA1 3.将SHA1哈希的一部分作为密码

上面的算法应用于服务器端和设备端。所以他们不需要有任何交互。所以如果用户忘记密码,他可以请求服务器。服务器像上面那样运行算法并将生成的密码发送给用户的电子邮件。在设备端,使用相同的alto生成相同的密码。所以当用户输入时,它匹配并且用户被授予访问权限。

不知何故,我不满意这个,因为我们使用相同的字符串来生成密码。所以每次用户忘记密码并生成密码,他都会得到相同的密码,而不是密码生成器的工作方式。

所以我想增加一些更多的字符串,这将是可变的,但将在服务器和设备端相同。其中一种选择是在字符串中使用日期,但如果服务器位于不同的时区设备中,并且服务器将生成不同的密码。

有没有更好的解决方案呢?请建议...

+0

该算法违反了[Kerckoffs原则](http://en.wikipedia.org/wiki/Kerckhoffs's_principle)。虽然不是直接等价,但我相信它适用。实质上,任何加密方法(或者在这种情况下密码存储)都不应该依赖秘密的算法来保证安全。如果我知道算法,那么我可以尝试计算用户的密码。 – mjshaw 2013-02-25 07:49:42

+0

可以请你提供一些解决方案吗? – Sagrian 2013-02-25 09:38:38

回答

1

听起来像你想要使用“基于哈希的消息认证码”(HMAC)。这背后的想法是,即使在纯文本连接中,用户的密码也不可见,因为用户名,密码和服务器生成的“会话密钥”被用于生成随会话密钥更改而改变的散列。鉴于哈希是单向的,从网络连接发送的哈希中导出用户密码是不可能的。

阳光下没有什么新鲜事。

+0

没有遵循很多:(你可以试着用不同的词来表达吗?我也经历了你给出的链接,但它似乎也会一直生成相同的密码。 – Sagrian 2013-02-25 09:35:18