每隔一段时间我就遇到一些强制您偶尔更改密码的应用程序。几乎普遍,他们对新密码有这种奇怪的要求:它必须与以前的密码“显着”不同。
虽然起初这听起来合乎逻辑,但我认为接下来的事情是:他们是如何做到的?他们用纯文本存储我的密码吗?我会接受他们所做的答案,如果不是因为这些类型的应用程序假装关心安全性如此之多,它们会强迫您在密码过期时更改密码! Microsoft Exchange就是其中的一个例子。
我不擅长加密和散列函数,所以我的问题是:是否可以在不以纯文本格式存储密码的情况下强制执行此类策略?
您知道在实际应用中如何实施此政策吗?
更新:示例。 我最近更改了我的Microsoft Exchange密码。我只使用Web Access,所以它可能会有所不同 - 我不知道。 所以,它迫使我改变我的密码。我有时做的是将其更改为新的,然后几乎立即将其更改。奇怪的是,由于这一点,它甚至不允许我改回来。我尝试通过在它前面添加一个字母或更改一个符号来尝试改变它 - 没有运气,它在抱怨。
答案 0 :(得分:8)
更改密码时,通常会要求旧密码确认您的身份。然后,比较旧的和新的,看看它们有多大差异是微不足道的。 TBH我不知道如何在不存储密码的情况下与之前的几个密码进行比较,但无论如何都要进入荒谬的政策领域。
答案 1 :(得分:7)
使用典型的哈希值,您可以做的最好的事情是查看新密码是否完全等于之前的密码。您可以将密码分成多个哈希,以便通过比较获得更灵活,例如3个哈希:
例如,您可以要求更改所有哈希值,以防止用户只将密码从SecretPassword01
更改为SecretPassword02
。
加密专家可能会在此权衡这是否可以像单个哈希一样安全。
注意,这不与单个哈希一样安全,因此在您实施此功能之前,请确保您已完成研究。