【问题标题】:Find Encryption method and key from before and after encryption string从加密字符串前后查找加密方法和密钥
【发布时间】:2012-06-14 17:21:52
【问题描述】:
我有一个大约有 4,000 名成员的数据库。我需要解密他们所有的密码,以便我可以使用 MD5 重新加密它们并放入新系统。我有一个加密前和加密后密码字符串的帐户,因此我假设我应该能够找出一种方法和密钥范围。我无权访问原始源代码,否则我不会在这里。
我应该提到现有的密码变化很大。
用户1 - qwDyP1db9iOPI
用户 2 - $1$.WXtDyLg$yxBPAWxzd.srEWJZfqZAY/
User3 - do8sLMoVVqxKQ
User4 - TKmnAlPe
我该如何处理这样的问题?
【问题讨论】:
标签:
hash
passwords
md5
encryption
【解决方案1】:
通常,您无法解密密码,因为密码不会被存储。您看到的是密码的哈希值 - 没有有效的方法可以找到与特定哈希值匹配的密码。
您可以在将配置更改为使用 MD5 哈希后强制所有人更改密码,或者您可以为每个人生成新的临时密码以一次性替换所有哈希,但无论如何他们都应该再次更改密码.
那些看起来可能来自 Linux(以 $1$ 开头的已经是 MD5 哈希,其他看起来像旧的 crypt() DES 变体样式)。
在处理应用程序密码时并非总是如此——例如,一些数据库使用相当弱的凭据存储——但 Unix/Linux 版本已经很长时间没有存储实际密码了。
【解决方案2】:
让我们想想。假设我可以破解你的计算机/数据库(不是不可能的任务)。所以我有你所拥有的 - 所有用户密码的列表,但已加密。但很可能我可以自己注册到您的系统,而且我知道自己的密码。我可以通过我的用户名或最新条目在数据库中找到它的加密形式,所以现在我有了明文 + 加密对!如果我能按照您的要求进行操作,我将拥有所有密码和对所有帐户的完全访问权限。这意味着加密密码或一般数据几乎没有额外的安全影响,我所关心的只是防止未经授权访问数据。但这不是真的,所以你不能:)
顺便说一句,MD5 不是加密,而是哈希,或者更准确地说是摘要。
【解决方案3】:
看起来 twalberg 在大多数情况下是正确的,但我想更进一步给你一些实用的建议:
1) 查看http://www.openwall.com/john/(开膛手约翰)以获取从您拥有的数据库中获取原始密码的帮助。请注意,生成的密码可能不是原始密码(有可能,但不确定)。
使用此工具获得所有密码后,请想想:任何人都可以做到这一点。您的用户可能会在其他地方使用这些密码。如果有人闯入您的网站,他们可能会暴露信任您的人。如果有人使用此信息侵入他们的其他帐户,您的用户可能会责怪您。拥有明文密码对你来说是有风险的。
我建议您借此机会让您的用户更改密码。那些不再使用他们的帐户的人可能需要通过一个小的验证步骤才能重新获得访问权限,因此您现在可以禁用他们的帐户。
2) 当您生成新的密码数据库时,我建议您至少使用安全哈希(例如 SHA1 或 SHA2)以及每个用户的盐(以标准方式添加到生成的哈希输出的随机值)以帮助保护数据库免受意外暴露。
虽然此答案效率不高,但如果您的实际密码数据库甚至与您所代表的比例大致相同,那么对于您当前的数据库来说,它可能在大多数情况下都是实用的。
【解决方案4】:
如果您要从当前系统切换,请不要切换到普通 MD5 - 有“彩虹表”可以破解许多常用密码;而是使用盐渍/双 MD5 或 SHA
【解决方案5】:
感谢大家的意见。我会让每个人都更改密码。我无意保留任何人的密码。目标是让所有 4000 名用户在迁移到新系统后都不必更改密码,但这似乎是不可避免的。正如 davka 指出的那样,我在这个数据库中有一个帐户并且知道我的密码并且可以看到加密版本,因此认为这足以开发一个脚本来解密并将密码租用到新数据库中。再次感谢。