gpt4 book ai didi

c# - 如何用零删除 StringBuilder 内存

转载 作者:可可西里 更新时间:2023-11-01 08:54:42 29 4
gpt4 key购买 nike

我在 StringBuilder 对象中存储了一个密码。我正在寻找一种方法来删除内存中的密码。以下任何一种方法都可以实现这一点:

  1. 遍历 StringBuilder 字符并分配 '\0'。是如果我已经分配,​​这保证使用相同的内存最初有足够的内存吗?
  2. 我可以使用任何非托管 API,例如 ZeroMemory()SecureZeroMemory()使用 StringBuilder?有代码示例吗?

编辑:

使用 SecureString 不是我的选择,因为我正在调用 CredUIPromptForCredentials() 来获取凭据。

最佳答案

简单的答案是,您提出的所有方法都不安全。一旦您将密码输入 StringBuilder,游戏就结束了。不要使用 StringBuilder 来存储密码,如果您必须使用托管类,请改用 SecureString

现在,您在评论中说您正在调用 CredUIPromptForCredentials。这样做,但不要将密码放入 StringBuilder 中。将其放入非托管内存中,例如使用 Marshal.AllocHGlobal 分配。然后,当您使用完该非托管内存后,按照 CredUIPromptForCredentials 的文档进行操作说和打电话SecureZeroMemory在释放非托管内存之前。

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

关于c# - 如何用零删除 StringBuilder 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20357196/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com