10

我有将字符串加密为 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);
    }

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

4

2 回答 2

24

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

例子:

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

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

不过,这只是最基本的,在使用散列算法时,您也应该考虑使用Salt

于 2012-04-22T20:07:01.267 回答
6

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

不过,您可以对其进行暴力破解,这意味着您可以尝试计算大量不同输入的哈希值并查看哈希值是否匹配。

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

请参阅Wikipedia上有关散列函数的详细信息。

于 2012-04-22T20:04:25.980 回答