C# 从SHA256解密

C# 从SHA256解密,c#,cryptography,encryption,C#,Cryptography,Encryption,我有将字符串加密到sha256和base64的代码: public static string Sha256encrypt(string phrase) { UTF8Encoding encoder = new UTF8Encoding(); SHA256Managed sha256hasher = new SHA256Managed(); byte[] hashedDataBytes = sha256hasher.ComputeHash

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

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

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

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

在将来的某个时候,可能会发现SHA的密码弱点,从而使其容易损坏,但实际上它不是一个可逆函数


请参阅上的哈希函数的详细信息。

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

例如:

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

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

这只是非常基础的,但是当使用哈希算法时,你应该考虑使用.y/p>检查下面关于哈希密码的信息。不止是一个盐,你应该重复你的哈希。或者更好(更好),不要自己发明:使用PBKDF2、scrypt或bcrypt.Sha256可以解密,请查看网站@obaid-它不会解密,它只是在数据库中查找匹配的哈希。您无法反转SHA256,因为它具有破坏性,无论您输入多少数据,您只能获得256位。战争与和平可以被SHA256'd,但你不能从散列位中得到战争与和平。“无论你输入多少数据,你只能得到256位”这让我理解了SHA256谢谢@DaveShaw