1

我有一个大约有 4,000 名成员的数据库。我需要解密他们所有的密码,以便我可以使用 MD5 重新加密它们并放入新系统。我有一个加密前和加密后密码字符串的帐户,因此我假设我应该能够找出一种方法和密钥范围。我无权访问原始源代码,否则我不会在这里。

我应该提到现有的密码变化很大。

用户 1 - qwDyP1db9iOPI

用户 2 - $1$.WXtDyLg$yxBPAWxzd.srEWJZfqZAY/

用户 3 - do8sLMoVVqxKQ

用户 4 - TKmnAlPe

我该如何处理这样的问题?

4

5 回答 5

3

通常,您无法解密密码,因为未存储密码。您看到的是密码的哈希值 - 没有有效的方法来找到与特定哈希值匹配的密码。

您可以在将配置更改为使用 MD5 散列后强制每个人更改密码,或者您可以为每个人生成新的临时密码以立即替换所有散列,但无论如何他们都应该再次更改它们。

这些看起来可能来自 Linux(以 $1$ 开头的已经是 MD5 哈希,其他看起来像旧的crypt()DES 变体样式)。

在处理应用程序密码时并非总是如此——例如,一些数据库使用相当弱的凭证存储——但 Unix/Linux 版本已经很长时间没有存储实际密码了,如果有的话。

于 2012-06-11T19:54:48.567 回答
1

让我们想想。假设我可以破解你的计算机/数据库(不是不可能的任务)。所以我有你所拥有的 - 所有用户密码的列表,但已加密。但很可能我可以自己注册到您的系统,而且我知道自己的密码。我可以通过我的用户名或最新条目在数据库中找到它的加密形式,所以现在我有了明文 + 加密对!如果我可以按照您的要求进行操作,我将拥有所有密码和对所有帐户的完全访问权限。这意味着加密密码或一般数据几乎没有额外的安全影响,我所关心的只是防止未经授权访问数据。但这不是真的,所以你不能:)

顺便说一句,MD5 不是加密,而是哈希,或者更准确地说是摘要。

于 2012-06-11T20:24:41.223 回答
1

看起来 twalberg 在大多数情况下是正确的,但我想更进一步给你一些实用的建议:

1) 查看http://www.openwall.com/john/ (John the Ripper) 以获取从您拥有的数据库中获取原始密码的帮助。请注意,生成的密码可能不是原始密码(很可能,但不确定)。

使用此工具获得所有密码后,请想一想:任何人都可以做到这一点。您的用户可能会在其他地方使用这些密码。如果有人闯入您的网站,他们可能会暴露信任您的人。如果有人使用此信息侵入他们的其他帐户,您的用户可能会责怪您。拥有明文密码对您来说是有风险的。

我建议您借此机会让您的用户更改他们的密码。那些不再使用其帐户的人可能需要通过一个小的验证步骤才能重新获得访问权限,因此您现在可以禁用他们的帐户。

2)当您生成新密码数据库时,我建议您至少使用安全哈希(例如 SHA1 或 SHA2)以及每个用户的盐(以标准方式添加到生成的哈希输出的随机值)以帮助保护数据库免于意外暴露。

虽然这个答案效率不高,但如果您的实际密码数据库甚至与您所代表的比例大致相同,那么对于您当前的数据库来说,它可能在大多数情况下都是实用的。

于 2012-06-12T03:53:14.923 回答
1

如果您要从当前系统切换,请不要切换到普通 MD5 - 有“彩虹表”可以破解许多常见密码;而是使用盐渍/双 MD5 或 SHA

于 2012-06-12T19:03:25.287 回答
0

感谢大家的意见。我会让每个人都更改密码。我无意保留任何人的密码。目标是让所有 4000 名用户在迁移到新系统后都不必更改密码,但这似乎是不可避免的。正如 davka 指出的那样,我在这个数据库中有一个帐户并且知道我的密码并且可以看到加密版本,因此认为这足以开发一个脚本来解密并将密码租用到新数据库中。再次感谢。

于 2012-06-12T10:41:37.653 回答