我目前正在使用以下散列算法在我的数据库中存储加密文本:
public static string HashString(string inputString, string hashName)
{
HashAlgorithm algorithm = HashAlgorithm.Create(hashName);
byte[] hash = algorithm.ComputeHash(Encoding.UTF8.GetBytes(inputString));
return Convert.ToBase64String(hash);
}
基本上,每当用户输入任何需要加密的内容时,我首先调用此函数,然后将结果存储在数据库中。
到目前为止,这对我来说很好,因为我只存储了密码,而且我从不需要实际输出内容。每当用户想要登录时,我会输入他们输入的密码,使用上述功能对其进行加密,然后将加密的密码与存储在数据库中的值进行比较。
我现在遇到的问题是,在某些情况下,我做需要获取未散列的内容。基本上,我希望客户能够存储其SMTP发送帐户的用户名和密码,然后我需要能够使用以下内容创建凭据:
System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(login, pass)
由于我的数据库中存储的内容是使用HashString方法加密的,我如何将密码发送到NetworkCredential,以便在我的SmtpClient中使用?理想情况下,我想维护关于我自己无法获取这些密码的部分。
答案 0 :(得分:0)
在阅读了更多内容之后,我意识到我的问题并没有得到很好的表述。我打算将此标记为已回答,并提升@ GolezTrol的评论
请注意,散列与加密不同。你可以解密一些东西,但你不能解开某些东西。哈希是不可逆转的。此外,如果您需要实际的登录名和密码来传递给该功能,您必须拥有它。如果您没有实际的未加密密码,则无法使用它。
因为它帮助引导我走向正确的方向。我发现Fundamental difference between Hashing and Encryption algorithms是一个有用的参考,可以帮助我更接近我应该做的事情。