存储密码供外部使用
Storing passwords for external use
我目前正在使用以下哈希算法在我的数据库中存储加密文本:
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 中使用?理想情况下,我想保留关于我自己无法获得这些密码的部分。
在进一步阅读之后,我意识到我的问题没有很好地表述。我要将其标记为已回答,并为@GolezTrol 的评论点赞
Note that hashing is not the same as encrypting. You can unencrypt something, but you can't unhash something. Hashing is irreversible. In addition, if you need the actual login and password to pass to that function, you will have to have it. You can't use it if you don't have the actual unencrypted password.
因为它帮助我朝着正确的方向前进。我发现 Fundamental difference between Hashing and Encryption algorithms 是一个有用的参考,有助于引导我更接近我应该做的事情。
我目前正在使用以下哈希算法在我的数据库中存储加密文本:
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 中使用?理想情况下,我想保留关于我自己无法获得这些密码的部分。
在进一步阅读之后,我意识到我的问题没有很好地表述。我要将其标记为已回答,并为@GolezTrol 的评论点赞
Note that hashing is not the same as encrypting. You can unencrypt something, but you can't unhash something. Hashing is irreversible. In addition, if you need the actual login and password to pass to that function, you will have to have it. You can't use it if you don't have the actual unencrypted password.
因为它帮助我朝着正确的方向前进。我发现 Fundamental difference between Hashing and Encryption algorithms 是一个有用的参考,有助于引导我更接近我应该做的事情。