从SHA256解密

net*_*jor 8 c# encryption cryptography

我有那个代码加密字符串到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);
    }
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*haw 17

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

例:

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

var allowLogin = hashedPassword == storedPassword; //storedPassword from Database, etc.
Run Code Online (Sandbox Code Playgroud)

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

  • 不仅仅是盐,你应该迭代哈希.或者更好(更好),不要自己发明:使用PBKDF2,scrypt或bcrypt. (2认同)
  • @obaid - 这不会解密它,它只是在数据库中查找匹配的哈希值。您无法反转 SHA256,因为它具有破坏性,无论您输入多少数据,您都只能得到 256 位。《战争与和平》可以进行 SHA256 处理,但您无法从哈希位恢复《战争与和平》。 (2认同)

小智 6

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

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

在将来的某个时候,可以找到SHA的加密弱点,从而使其易碎但实际上它不是可逆功能.

请参阅Wikipedia上有关哈希函数的详细信息.