【问题标题】:MD5 convert and convert it back in textMD5 转换并将其转换回文本
【发布时间】:2011-12-05 14:12:27
【问题描述】:

我想将密码s保存在md5加密的数据库中 如何用c#将文本转成md5再转回文本?

谢谢

【问题讨论】:

  • 请为您的问题添加更多背景信息 - 您想要达到什么目的?
  • 通过 MD5 散列方法运行文本不会对其进行加密。通过 MD5 散列方法运行的值是一种方法。如果没有原始文本,除非您尝试所有可能的组合,否则无法获得原始值。不要使用简单的 MD5 哈希存储密码,它真的不安全,而且极易暴力破解。
  • 如果不是因为这篇文章可能会作为对其他人的警告,我会标记它!

标签: c# encryption md5


【解决方案1】:

Hashing 不是 encryption - 它是不可逆的。

【讨论】:

  • 我想指出它不应该是可逆的。每个人都知道一些哈希方法,比如 md5,真的很容易破译,因此是可逆的。如果你的意思是算法不允许它是可逆的,那么你是对的。
  • @Rutix - 彩虹表是查找,因此 一些 MD5 散列变得“可逆”。即使这样,如果你添加一些超出大多数彩虹表生成值的特殊字符,你是安全的。
  • 是的,我知道,你是对的。我只是想指出,这取决于您对可逆的定义:)。
【解决方案2】:

您不需要转换回原始密码。如果您想检查用户是否输入了正确的密码,您应该对他们的尝试进行哈希处理,并将该哈希值与数据库中的哈希值进行比较。在任何时候都不会将明文密码与任何东西进行比较。

【讨论】:

  • 你忘了指出他不应该使用 MD5 来加密/散列密码。
【解决方案3】:

您不应该使用 MD5 来散列密码,它非常不安全。你应该做的是使用用户特定的盐和可能需要至少 1 秒才能运行的 3 种不同的散列算法。 1 秒似乎很长,但这就是重点。您的用户只需登录网站一次,破解者将不得不花费一分钟尝试 60 个不同的密码。我个人使用站点特定的盐和用户特定的盐。这样,如果我的数据库遭到破坏,他们仍然会丢失一些破解密码的部分。

【讨论】:

  • 为了获得用户特定的盐,它必须基于用户的详细信息。没有理由通过 3 种不同的散列算法运行相同的值。更好的解决方案是使用加密算法。否则,您关于为每个用户使用唯一盐的建议是有效的。
  • 为什么必须基于用户的详细信息?您可以在用户注册时创建一个 GUID,或者像我在我的 PHP 站点上使用 Linux 的 urandom 来创建用户盐一样。您不需要 3 种散列算法,但我这样做是为了在通过我的循环运行它时使其处理器更密集。
  • 使哈希变慢会占用您自己的服务器资源。如果您要防止有人从您的站点外部进行黑客攻击,延迟响应(可能根据尝试次数而分级)将完成同样的事情。使您的哈希函数变得昂贵的目的是为了以防黑客真正进入您的服务器......出于可用性原因,我更喜欢 0.1 秒到 1.0 秒,因为在蛮力时存在收益递减规律- 强制使用用户密码,例如 1.0s 和 0.1s 在黑客利益方面差别不大,但对您的用户仍然很重要。
【解决方案4】:

保存密码的哈希值并不是保存密码 - 您无法从中取回密码。只有一种方式。否则就叫加密。

您正在保存一些内容,您可以将其与稍后输入的另一个密码的哈希值进行比较。如果两个哈希相同,则密码相同(嗯,极不可能是其他任何东西 - 排除哈希冲突,因为使用足够大空间的良好哈希算法比 Gorillas 不太可能)

您可以在 Crypto SE 上查看salting vs multiple hashes 上的讨论。

【讨论】:

    猜你喜欢
    • 2013-07-20
    • 2013-11-17
    • 2012-03-28
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 2015-07-21
    相关资源
    最近更新 更多