has*_*mit 10 c# security stringbuilder
我有一个存储在StringBuilder对象中的密码.我正在寻找一种方法来擦除内存中的密码.以下任何方法都可以实现此目的:
'\0'.如果我最初分配了足够的内存,这可以保证使用相同的内存吗?ZeroMemory()或SecureZeroMemory()
用StringBuilder?任何代码示例?编辑:
使用SecureString对我来说不是一个选项,因为我打电话CredUIPromptForCredentials()来获取凭据.
Dav*_*nan 25
简单的答案是,您提出的方法都不安全.一旦你输入了密码StringBuilder,游戏结束了.如果必须使用托管类,请不要StringBuilder用于存储密码,SecureString而是使用密码.
现在,你在评论中说你正在打电话CredUIPromptForCredentials.这样做,但不要把密码放入StringBuilder.把它放入非托管内存,例如分配Marshal.AllocHGlobal.然后,当您完成非托管内存时,在释放非托管内存之前,执行文档CredUIPromptForCredentials说和调用SecureZeroMemory.
我注意到pinvoke.net翻译StringBuilder用于密码参数.也许这就是让你误入歧途的原因.你不需要这样做(你不应该这样做).声明参数具有类型IntPtr.