我使用ASP.NET MVC 3会员资格为我的网站默认。因此,用户的会员密码被安全存储。
我的服务要求用户输入他们使用的其他网络服务的用户名/密码。我从我的服务中访问这些服务。如果我保存用户的服务密码,我需要确保安全地存储这些用户名/密码,这样如果有人攻击我的服务器,他们将不会被曝光。
我理解如何完成此操作的一般概念(使用他们提供的ASP.NET成员资格的哈希作为密钥加密用户名/ pw)。但我不知道具体的API或正确的模式。
我也认为真的这样做基本上是不可能的,因为如果有人破解我的服务,他们可以简单地使用哈希来解密密码。我是对的。
假设我错了,可以做我想做的事,假设我的模型包含这样的东西:
public class MSExchangeSettings
{
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email address for your Exchange account")]
public string EmailAddress { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password for your Exchange account")]
public string Password { get; set; }
...
}
有人可以提供一个如何正确执行此操作的示例吗?
如果,这是不可能的,我将不得不每次都要求用户提供PW,我想避免。当然,对于我使用支持OpenID或OAuth的服务,我还有其他选择,但对于这个特定的例子(Exchange),我需要一个用户名/ pw。
答案 0 :(得分:-2)
看看这个
private static string GetPasswordHashed(string password) {
var saltBytes = new byte[0x10];
using (var random = new RNGCryptoServiceProvider()) {
random.GetBytes(saltBytes);
}
var passwordBytes = Encoding.Unicode.GetBytes(password);
var combinedBytes = saltBytes.Concat(passwordBytes).ToArray();
byte[] hashBytes;
using (var hashAlgorithm = HashAlgorithm.Create("HashAlgorithm")) {
hashBytes = hashAlgorithm.ComputeHash(combinedBytes);
}
var PasswordHashed = Convert.ToBase64String(hashBytes);
return PasswordHashed;
}