2017-04-20 67 views
-2

我如何解密这种哈希加密类型,因为我不知道该方法或有解密码?解密散列

public string EncryptPassword(string password) 
     { 
      var bytes = new UTF8Encoding().GetBytes(password); 
      byte[] hashBytes; 
      using (var algorithm = new System.Security.Cryptography.SHA512Managed()) 
      { 
       hashBytes = algorithm.ComputeHash(bytes); 
      } 
      return Convert.ToBase64String(hashBytes); 
     } 
    } 
+2

散列是单向转换。 – Nino

+0

散列与加密不同。对于更简单的哈希算法,您可以尝试使用彩虹表进行暴力破解,但[可能不适用于SHA512](https://security.stackexchange.com/questions/44171/are-there-sha-512-rainbow-tables-available ) – stuartd

+0

我怀疑你希望能够将密码发回给用户。在决定最好不要散列密码之前,请参阅[散列密码的最佳做法](http://stackoverflow.com/a/20186472/402022)和[通过电子邮件恢复/重置丢失的密码选项](http: //stackoverflow.com/a/13330223/402022)。 – Theraot

回答

3

由于SHA512是单向散列,因此无法解密该值。

下面是一些关于如何不能解密的详细信息:How to decrypt SHA-512 hashed data

+0

所以我可以从我的项目中删除它,而不会产生任何错误? –

+0

@thlakkhthlakkh我不认为你应该删除这样的功能......它可能会影响用户的日志等...... – Nino

+1

你应该可能希望你的密码被加密,但是如果你想清除你可以删除加密文字密码 – Avitus

0

这是很好的哈希密码保存在数据库中,因为它们不能被逆转。人们倾向于在不同的系统上使用相同的密码,这增加了攻击者可以从一个系统学习密码并在另一个系统上尝试密码的风险。如果您的系统遭到入侵,您在密码散列时可以保护用户。

从技术上讲,你的函数应该被命名为“HashPassword”而不是“EncryptPassword”,因为加密和散列并不是一回事。加密是可逆的 - 您可以解密并获取原始内容。哈希是“单向” - 就像总结一个数字列表一样。您可以通过再次总结和比较来验证数字未发生变化,但您无法仅从总和中生成数字列表。哈希以相同的方式工作。

向前发展的最佳选择是继续使用散列并创建不需要知道用户密码的流程和策略。在登录时,您散列提交的密码并比较散列值,而不是直接比较密码。如果有人不记得他们的密码,您可以通过电子邮件向他们发送令牌,让他们重置密码,而不是通过电子邮件向他们发送密码。