【问题标题】:Decryption method for an encryption method加密方法的解密方法
【发布时间】:2016-01-10 17:31:07
【问题描述】:

我找到了一种简单的加密方法来加密密码。 (我想是这样)。我想在我的应用程序中使用这种方法。但是我正在努力开发一种解密方法来获取已通过该加密方法加密的实际字符串。谁能给我这个加密方法的解密方法?提前致谢!

public static string Encode(string value)
    {
        var hash = System.Security.Cryptography.SHA1.Create();
        var encoder = new System.Text.ASCIIEncoding();
        var combined = encoder.GetBytes(value ?? "");
        return BitConverter.ToString(hash.ComputeHash(combined)).ToLower().Replace("-", "");
    }

【问题讨论】:

标签: security encryption


【解决方案1】:

如果我没记错的话,该方法是使用 SHA1 标准散列您的密码。

散列是一种特殊类型的单向加密。意思是you can't decrypt it

我假设您想要解密它以便根据登录表单检查某人的密码。处理的方法是存储加密的密码;然后当有人填写您的表单时,使用相同的加密方法对其输入进行加密,并查看两个加密字符串是否匹配。


附带说明,如果您正在散列,请不要忘记给您的散列加盐。这将要求您将哈希和盐存储在数据库中;检查密码时,只需检索与输入的用户名关联的盐,将其添加到表单输入的密码中,对其进行散列,然后将新散列与存储的加盐的散列核对。如果他们匹配,宾果!如果不是,那就是密码错误。


更多...

查看类似问题的其他答案,为了完整起见,让我添加这个。

这个问题的简短回答是。这些散列算法被设计为“不可破解”。然而,这并不意味着它们不能被破坏。破解 SHA1 或任何其他基于模数的散列算法的方法是“猜测和检查”。基本上:

  1. 输入密码
  2. 如果它是正确的,那就太好了!你进来了!
  3. 如果不正确,请转到1。

就像您遇到的任何其他密码系统一样,破解它的方法是暴力破解。你可以想象有很多程序就是为了做到这一点而设计的。散列算法的问题在于它们对相同的输入产生相同的结果。由于您使用的是 SHA1,这是数百万其他应用程序使用的标准库,我可以向您保证,如果您使用它,普通的 SHA1 可以并且将会被破坏。

解决这个问题的方法是使用加盐,如上所述。这会更改每个用户的特定密码的输入;这意味着如果三个用户都具有相同的密码,例如“密码”,则每个用户的密码都将作为不同的结果存储在数据库中。

如果它们在没有盐的情况下通过 sha1,它们都会是相同的,因为您输入的是相同的输入:

password ---SHA1---> sha1$asdfasdfasdfasdf
password ---SHA1---> sha1$asdfasdfasdfasdf
password ---SHA1---> sha1$asdfasdfasdfasdf

因此,如果有人访问了您的数据库,他们可以查找重复的密码并针对他们检查常用密码,直到他们意识到 sha1$asdfasdfasdfasdf 实际上意味着“密码”。

但是通过在等式中添加盐,每个用户本质上都在输入不同的密码

salt1password ---SHA1---> sha1$aogiahowehgpa
salt2password ---SHA1---> sha1$oh9h42h980agh
salt3password ---SHA1---> sha1$322tyyha0gh9w

这使您的系统几乎不可能被破解。如果有人可以访问您的数据库,则不会有重复项要检查。

所以总是给你的哈希加盐!

【讨论】:

  • @Kalagen 谢谢,我试试 :)
  • @David,感谢您提供宝贵的信息!是的,当有些人正在记录时,这就是我正在做的事情。但是在方便编辑密码时会出现问题。我必须解密加密值并向用户显示实际密码。您能否为我提供这种情况的链接或资源
  • @Isuru 这根本不可能,除非您存储未散列的密码。这本身就是为什么大型网站从不向您显示密码的原因。这是不安全的。尝试在任何网站(如 Google、Stack Exchange、Facebook 等)上更改您的密码。他们会让您更改密码,但他们永远不会向您透露密码是什么。他们甚至可能存储旧的哈希密码,以确保您不会重复使用旧密码。
  • 散列不是一种特殊类型的加密,因为根据定义,加密是双向的。
  • @ArtjomB。现在你只是在挑选单词。番茄番茄酱。真的值得为此而否决我的答案吗?
猜你喜欢
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
相关资源
最近更新 更多