如何用零擦除StringBuilder内存

 JohnBeanLee 发布于 2023-02-13 10:27

我有一个存储在StringBuilder对象中的密码.我正在寻找一种方法来擦除内存中的密码.以下任何方法都可以实现此目的:

    迭代StringBuilder字符并分配'\0'.如果我最初分配了足够的内存,这可以保证使用相同的内存吗?

    我可以使用任何非托管API像ZeroMemory()SecureZeroMemory()StringBuilder?任何代码示例?

编辑:

使用SecureString对我来说不是一个选项,因为我打电话CredUIPromptForCredentials()来获取凭据.

1 个回答
  • 简单的答案是,您提出的方法都不安全.一旦你输入了密码StringBuilder,游戏结束了.如果必须使用托管类,请不要StringBuilder用于存储密码,SecureString而是使用密码.

    现在,你在评论中说你正在打电话CredUIPromptForCredentials.这样做,但不要把密码放入StringBuilder.把它放入非托管内存,例如分配Marshal.AllocHGlobal.然后,当您完成非托管内存时,在释放非托管内存之前,执行文档CredUIPromptForCredentials说和调用SecureZeroMemory.

    我注意到pinvoke.net翻译StringBuilder用于密码参数.也许这就是让你误入歧途的原因.你不需要这样做(你不应该这样做).声明参数具有类型IntPtr.

    2023-02-13 10:31 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有