delphi 如何在C++Builder中安全地清除TEEdit的文本?

4smxwvx5  于 2023-04-20  发布在  其他
关注(0)|答案(1)|浏览(159)

我需要安全地清除一个包含敏感信息的TEdit控件,这样进程内存就不会包含它(此时我不担心分页文件)。
我已经尝试直接访问String来设置当前长度为空格(使用_wmemset()),然后我将使用它来更新TEdit控件。通过使用相同大小的空格字符串,我假设TEdit控件将使用其现有的缓冲区来覆盖。
但是,我甚至不能直接更新String缓冲区。
我见过使用UniqueString(EditControl->Text)的示例,但最终出现了以下错误:
候选函数不可行:第一个参数需要一个左值
另外两个关于:
其他字符串类型没有已知的转换
如果我使用data()c_str(),它显然是在改变一个副本,而不是字符串,因为如果我打印出EditControl->Text,我会得到相同的未修改的字符串。
因此,我的第一个问题是,如何清除String中使用的缓冲区,以确保敏感数据不再位于内存中。
第二个问题是,我最终如何清除TEdit控件?

iyfamqjs

iyfamqjs1#

我发现访问TEditText属性总是临时的,用于直接从控件发送/检索数据。
因此,对于敏感数据,您希望避免使用Text属性,而是使用一些老式的Win32 SetWindowText()/GetWindowText(),即::SetWindowText(EditControl->Handle, TCharBufWithString);
然后,您可以控制自己的缓冲区。

相关问题