我通过以下代码加密密码
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;
}
之后我把它保存在数据库中。
现在我想通过解密来检索实际密码。请帮帮我
答案 0 :(得分:2)
您hash
密码而您没有encrypt
。据说你不能decrypt
它。
取自here
加密仅以这种方式将数据转换为另一种格式 特定个人可以扭转转型。它使用一把钥匙, 这是保密的,与明文和 算法,以执行加密操作。就这样, 密文,算法和密钥都需要返回 明文。
,而
散步的目的是确保完整性,即实现完整性 如果某些事情发生了变化,你就可以知道它已经改变了。 从技术上讲,散列需要任意输入并产生固定长度 具有以下属性的字符串:
- 相同的输入将始终产生相同的输出。
- 多个不同的输入不应产生相同的输出。
- 不应该从输出转到输入。
- 对给定输入的任何修改都会导致哈希值发生剧烈变化。
醇>哈希用于 与认证相结合,产生强有力的证据表明 给定的消息尚未修改。这是通过采取一个 给定输入,使用给定密钥对其进行加密,对其进行散列,然后进行 使用收件人的公钥和签名加密密钥 带有发件人私钥的哈希。
然后我可以使用哪些可以将输出转换为输入?
您应该解密数据而不是哈希。加密和解密数据是一个很大的主题。一个好的起点是阅读this。通常,您有两种类型的加密,对称和非对称。所以最初,阅读它们,然后选择您认为适合您需要的那个。然后尝试实现它。您将使用已在.NET中实现的算法,并可用于实例化相应类的对象并调用特定方法。
但是,我必须在这里做一个说明。通常,我们对密码进行哈希处理,我们不对它们进行加密。这更安全。取自here:
虽然散列和加密都提供了有价值的功能,但是 在绝大多数情况下, 只有一个正确的选项 存储在线应用程序的用户密码:哈希。 这是 单向函数,其中哈希值无法反转以获取 原始输入值(即密码)。对称加密是 基于加密密钥的使用并且是可逆操作。 拥有密钥的任何人都可以解密加密值以获得密钥 原始价值。