2012-06-11 38 views
1

我有一个大约有4,000个成员的数据库。我需要解密所有的密码,以便我可以使用MD5对它们进行重新加密并放入新系统。我有一个帐户加密之前和加密后的密码字符串,所以我想我应该能够找出一种方法和关键范围。我无法访问原始源代码,或者我不会在这里。从加密前后查找加密方法和密钥字符串

我应该提到现有的密码差别很大。

用户1 - qwDyP1db9iOPI

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

用户3 - do8sLMoVVqxKQ

用户4 - TKmnAlPe

如何处理这一问题?

回答

3

通常,您不能解密密码,因为密码不存储。你所看到的是密码的散列 - 没有有效的方法来找到与特定散列匹配的密码。

您可以迫使每个人都改变他们的密码,一旦你已经配置更改为使用MD5哈希,或者您也可以为每一位新的临时密码,以获得一次更换所有的哈希值,但随后他们都应该再次更改无论如何。

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

处理应用程序密码时并非总是如此 - 例如,某些数据库使用相当弱的凭证存储 - 但Unix/Linux的口味很长时间没有存储实际密码。

1

让我们来思考。假设我可以破解我的方式到您的计算机/数据库(不是不可能的任务)。所以我拥有你所拥有的 - 所有用户密码的列表,但都是加密的。但很可能我可以自己注册到您的系统,并且我知道我自己的密码。我可以通过我的用户名或最新条目在数据库中找到它的加密表单,所以现在我有了明确的加密对!如果我可以做你在问什么,我会拥有所有的密码和完全访问所有帐户。这意味着加密密码或数据通常几乎没有额外的安全影响,我应该关心的是防止对数据进行未经授权的访问。但事实并非如此,所以你不能:)

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

1

貌似twalberg是正确的大部分,但我想走得更远了一步给你一些实用的建议:

1)看http://www.openwall.com/john/(约翰开膛手),了解如何让原密码在你拥有的数据库之外。请注意,生成的密码可能不是原始密码(可能,但不确定)。

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

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

2)当您生成新的密码数据库时,我建议您至少使用一个安全散列(例如SHA1或SHA2)以及每个用户salt(随机值以生成的散列输出作为标准方式)帮助保护数据库免遭意外暴露。

尽管此答案效率不高,但对于您当前的数据库而言,如果您的实际密码数据库甚至大约具有您所代表的比例,则对于大多数情况下,您的当前数据库可能很实用。

0

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

1

如果您不想切换到当前系统,请不要切换到普通MD5 - 有“彩虹表”可以破解大量常用密码;改为使用盐渍/双重MD5或SHA