繁体   English   中英

从哈希字符串中获取原始密码

[英]Get original password from a hash string

在 C# 代码中,我有一个使用 WinSCP API 的应用程序。 (是否是 WinSCP 或其他什么并不重要)。

要打开一个会话,我需要一个用户和一个密码; 由于该用户/密码不是由任何外部用户引入的,它是直接从 app.config 之类的配置文件中获取并由代码直接插入的,因此我需要一种将其安全地存储在配置文件中的方法。

我使用了这个哈希生成器: http ://www.danstools.com/md5-hash-generator/ 从我的密码字符串生成一个 MD5 哈希字符串,它存储在 app.config 文件中。

所以我的问题是:如何从“哈希”字符串中获取原始密码?

以防万一:

如果这不是实现我需要的正确方法,请告诉我安全存储密码的好方法,并在需要时取回原始密码以在代码中使用它。

谢谢你。

好吧,坦率地说,你的方案被破坏了,你完全误解了哈希函数。

哈希函数是一种方式。 您不应该能够反转它们 - 事实上,有时两个不同的字符串将具有相同的哈希值。 例如,

4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2
4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2

008ee33a9d58b51cfeb425b0959121c9 () 到: 008ee33a9d58b51cfeb425b0959121c9来源

没有办法“反转”它们,因为这是“消息摘要”的重点。

不要使用某些网站来生成密码的哈希值,这只是有风险的。 您在未加密的连接 (http) 上输入了您的超级安全密码,并将其提供给第三方站点,该站点可能会或可能不会存储它(以及您的 IP)。 这听起来很偏执,但如果您试图保护此密码,那么您将在此过程中犯很多错误。 在我看来,该密码不能再使用了。

MD5 不是可接受的密码散列算法。 它太快了,如果我得到你密码的哈希值,我可能会在不到一天的时间内破解它,甚至可能更快。 如果您使用的是盐,那将是这样,您可能没有使用盐。 在这种情况下,您的密码将在几秒钟内用彩虹表破解。 你想要像 bcrypt/scrypt/pbkdf2 这样的东西,因为它们有一个可配置的工作因素,使它们变慢。

您的 app.config 应该是一个相当安全的文件,有些人会很乐意在此处以明文形式存储密码/连接字符串。 您想保护它是件好事,但正确的方法是加密配置文件(或仅加密特定字段)。 加密 => 可逆:散列 => 不可逆。

关于如何加密配置文件已经有很多问题,描述如何加密超出了问题的范围。

在此处检查(以及链接的重复项): 加密 Web.Config

使用哈希存储密码的原因是无法检索原始密码。 这样密码就被安全地存储了。 进行身份验证的方法是对密码使用相同的哈希函数(在您的情况下为 MD5),并比较两个哈希值是否相等,而不是密码本身。 哈希函数只在一个方向上起作用,但它会为相同的输入重现相同的结果。

我希望这有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM