使用SecureString时,.Net NetworkCredentials不安全密码存储为纯文本

时间:2014-12-19 14:49:59

标签: c# .net

我正在开发一个客户端应用程序,它使用带有基本身份验证的System.Net.Http.HttpClient来使用休息服务。为了提供我正在使用 System.Net.NetworkCredential 类的凭据。

从安全角度来看,我正在努力使我的应用程序尽可能安全,因此使用 System.Security.SecureString 来保存密码。我弄乱了一件奇怪的事情。 System.Net.NetworkCredential类。每当我设置NetworkCredential实例的SecurePassword属性并访问Password属性时,都会返回明文重复密码。这听起来像是一个安全问题。但老实说,我不确定密码是否在内存中保持为明文。

以下简单的测试方法说明了这种行为。

[TestMethod]
public void SecureNetworkCredentials_StoredAsPlainText()
{
    // Arrange
    String clearPassword = "mySecurePassword";
    SecureString encryptedPassword = new SecureString();
    foreach (var character in clearPassword.ToCharArray())
    {
        encryptedPassword.AppendChar(character);
    }
    // Act
    NetworkCredential cred = new NetworkCredential();
    cred.SecurePassword = encryptedPassword;

    // Assert
    Assert.AreNotEqual(cred.Password, clearPassword, "The password should not be the cleartext");
}

任何人都可以阐明这种行为或提供解决方法吗?

0 个答案:

没有答案