簡體   English   中英

來自COM DLL的C#SecureString用法

[英]C# SecureString Usage From COM DLL

我正在嘗試修復一些Fortify錯誤。 我的代碼()中的類將密碼存儲在字符串中。

 public class Foo: IDisposable
 {
 public string Password
  {
     get;
     set;
  }
 }

Fortify建議我將字符串更改為SecureString。 這可以解決Fortify問題,但是在此之后,我將無法使用此創建COM對象。

我將定義這樣的類:

[ComVisible(true)]
public class TestSecureString : IUnsecurePassword
{
    public SecureString Password
    {
        get;
        set;
    }

    string IUnsecurePassword.Password
    {
        get
        {
            if (Password == null)
                return null;

            IntPtr ptr = Marshal.SecureStringToBSTR(Password);
            string bstr = Marshal.PtrToStringBSTR(ptr);
            Marshal.ZeroFreeBSTR(ptr);
            return bstr;
        }
        set
        {
            if (value == null)
            {
                Password = null;
                return;
            }

            Password = new SecureString();
            foreach (char c in value)
            {
                Password.AppendChar(c);
            }
        }
    }
}

[ComVisible(true)]
public interface IUnsecurePassword
{
    string Password { get; set; }
}

然后在C ++中,將像這樣導出IUnsecurePassword接口:

  virtual HRESULT __stdcall get_Password (/*[out,retval]*/ BSTR * pRetVal ) = 0;
  virtual HRESULT __stdcall put_Password (/*[in]*/ BSTR pRetVal ) = 0;

它並不能阻止某人確實願意使用IUnsecurePassword接口,但是會提高標准。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM