COM DLL中的C#SecureString用法
我正试图修正一些强化错误。 代码()中的一个类将密码存储在字符串中COM DLL中的C#SecureString用法,c#,com,C#,Com,我正试图修正一些强化错误。 代码()中的一个类将密码存储在字符串中 public class Foo: IDisposable { public string Password { get; set; } } Fortify建议我将字符串更改为SecureString。 这解决了强化问题,但在此之后,我无法使用此选项创建COM对象。我将这样定义类: [ComVisible(true)] public class TestSecureString : IUns
public class Foo: IDisposable
{
public string Password
{
get;
set;
}
}
Fortify建议我将字符串更改为SecureString。
这解决了强化问题,但在此之后,我无法使用此选项创建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; }
}
virtual HRESULT __stdcall get_Password (/*[out,retval]*/ BSTR * pRetVal ) = 0;
virtual HRESULT __stdcall put_Password (/*[in]*/ BSTR pRetVal ) = 0;
<> >在C++中,[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; }
}
virtual HRESULT __stdcall get_Password (/*[out,retval]*/ BSTR * pRetVal ) = 0;
virtual HRESULT __stdcall put_Password (/*[in]*/ BSTR pRetVal ) = 0;
如果某人确实想使用IUnsecurePassword界面,它不会阻止他使用,但它会提高门槛。请提供更多信息,您遇到的错误是什么?是的,以及有关如何创建COM对象的更多详细信息可能也会有所帮助。我认为在调用COM Dll时,您需要将secureString转换为普通字符串。或者,您还需要更改COM DLL,以使用SecureString而不是普通字符串提供附加调用。