我如何解密这种类型的哈希加密,因为我不知道该方法或有解密代码?
public string EncryptPassword(string password)
{
var bytes = new UTF8Encoding().GetBytes(password);
byte[] hashBytes;
using (var algorithm = new System.Security.Cryptography.SHA512Managed())
{
hashBytes = algorithm.ComputeHash(bytes);
}
return Convert.ToBase64String(hashBytes);
}
}
答案 0 :(得分:3)
您无法解密该值,因为SHA512是单向散列。
以下是有关如何解密的更多信息:How to decrypt SHA-512 hashed data
答案 1 :(得分:0)
散列保存在数据库中的密码是好的,因为它们无法撤消。人们倾向于在不同系统上使用相同的密码,从而增加了攻击者可以从一个系统学习密码并在另一个系统上尝试使用密码的风险。如果您的系统遭到入侵,您可以在对密码进行哈希处理时保护用户。
从技术上讲,您的函数应该命名为“HashPassword”而不是“EncryptPassword”,因为加密和散列不是一回事。加密是可逆的 - 您可以解密并恢复原始内容。哈希是“单向” - 就像总结一个数字列表一样。您可以通过再次将它们相加并进行比较来验证数字是否未更改,但您无法仅从总和中生成数字列表。哈希的工作方式大致相同。
继续前进的最佳选择是继续使用哈希并创建不需要知道用户密码的流程和策略。登录时,您对提交的密码进行哈希处理并比较哈希值,而不是直接比较密码。如果有人忘记了密码,您可以通过电子邮件向他们发送令牌,让他们重置密码而不是通过电子邮件发送密码。