如何将SHA512哈希值解密为c#中的实际字符串

时间:2014-12-02 09:55:35

标签: c# encryption

我通过以下代码加密密码

HashAlgorithm hashAlgorithm = null;
hashAlgorithm = new SHA512CryptoServiceProvider();
try 
{
    byte[] byteValue = Encoding.UTF8.GetBytes(source);
    byte[] hashValue = hashAlgorithm.ComputeHash(byteValue);

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i <= hashValue.Length - 1; i++) 
    {
        sb.AppendFormat("{0:x2}", hashValue[i]);
    }

    return Convert.ToString(sb);
} 
catch 
{
    throw;
}
之后我把它保存在数据库中。 现在我想通过解密来检索实际密码。请帮帮我

1 个答案:

答案 0 :(得分:2)

hash密码而您没有encrypt。据说你不能decrypt它。

取自here

  

加密仅以这种方式将数据转换为另一种格式   特定个人可以扭转转型。它使用一把钥匙,   这是保密的,与明文和   算法,以执行加密操作。就这样,   密文,算法和密钥都需要返回   明文。

,而

  散步的目的是确保完整性,即实现完整性   如果某些事情发生了变化,你就可以知道它已经改变了。   从技术上讲,散列需要任意输入并产生固定长度   具有以下属性的字符串:

     
      
  1. 相同的输入将始终产生相同的输出。
  2.   
  3. 多个不同的输入不应产生相同的输出。
  4.   
  5. 不应该从输出转到输入。
  6.   
  7. 对给定输入的任何修改都会导致哈希值发生剧烈变化。
  8.         

    哈希用于   与认证相结合,产生强有力的证据表明   给定的消息尚未修改。这是通过采取一个   给定输入,使用给定密钥对其进行加密,对其进行散列,然后进行   使用收件人的公钥和签名加密密钥   带有发件人私钥的哈希。

然后我可以使用哪些可以将输出转换为输入?

您应该解密数据而不是哈希。加密和解密数据是一个很大的主题。一个好的起点是阅读this。通常,您有两种类型的加密,对称和非对称。所以最初,阅读它们,然后选择您认为适合您需要的那个。然后尝试实现它。您将使用已在.NET中实现的算法,并可用于实例化相应类的对象并调用特定方法。

但是,我必须在这里做一个说明。通常,我们对密码进行哈希处理,我们不对它们进行加密。这更安全。取自here

  

虽然散列和加密都提供了有价值的功能,但是   在绝大多数情况下, 只有一个正确的选项   存储在线应用程序的用户密码:哈希这是   单向函数,其中哈希值无法反转以获取   原始输入值(即密码)。对称加密是   基于加密密钥的使用并且是可逆操作。   拥有密钥的任何人都可以解密加密值以获得密钥   原始价值。