从SHA256解密

时间:2012-04-22 20:03:19

标签: c# cryptography encryption

我有用于将字符串加密到sha256和base64旁边的代码:

 public static string Sha256encrypt(string phrase)
    {
        UTF8Encoding encoder = new UTF8Encoding();
        SHA256Managed sha256hasher = new SHA256Managed();
        byte[] hashedDataBytes = sha256hasher.ComputeHash(encoder.GetBytes(phrase));
        return Convert.ToBase64String(hashedDataBytes);
    }

如何在另一方解密我的密码?

2 个答案:

答案 0 :(得分:15)

您无法解密One Way Hash的结果。您应该做的是比较输入的密码的哈希值与数据库中存储的哈希值。

示例:

var password = "1234";
var hashedPassword = Sha256encrypt(password);

var allowLogin = hashedPassword == storedPassword; //storedPassword from Database, etc.

这只是非常基础,但是当使用散列算法时,你也应该考虑使用Salt

答案 1 :(得分:6)

本身是不可能的。 SHA是一个哈希函数,这意味着它是单向的,仅用于验证和类似的东西。由于SHA-256的结果是固定长度(256位),这也意味着计算时大部分信息都会丢失。

你可以强制它,这意味着你可以尝试计算大量不同输入的散列,看看散列是否匹配。

将来某个时候可能会发现SHA的加密弱点,从而使其易碎,但实际上它不是可逆函数。

Wikipedia上查看有关哈希函数的详细信息。