【发布时间】:2013-12-06 15:57:58
【问题描述】:
Var
S1:String;
S2:String;
begin
S1:='Sensitive Data';
S2:=Crypt(S1,'encryption key');
S1:='';
FreeAndNil(S1);
end;
现在,当我使用“WinHex”之类的程序搜索我的进程内存时,我可以轻松找到未加密的字符串! 即使我尝试制作新表单来加密此字符串然后卸载表单但它仍然存在
有什么办法可以彻底消除
提前致谢
【问题讨论】:
-
所有字符串字面量将始终保留在内存中,因此如果您在测试项目中使用字符串字面量,但在真实代码中获取用户输入,您的测试将失败。
-
如果从内存中删除字符串会有什么帮助?它已经在可执行文件中。
-
处理完敏感数据后,将其覆盖。是的,取而代之的是安全的环境。
-
你为什么在字符串上调用 Free?你需要更好地理解。
-
如果您在加密时对其进行硬编码,并对加密值进行硬编码。该字符串将在内存中清晰可见,否则在可执行文件中可见。请记住,使用正确工具的人可以在解密并读取密钥时停止您的程序。打开一个十六进制编辑器并在你的 EXE 中搜索字符串——你会很明显地看到它。如果您在源外部对其进行加密,则加密字符串将可见。这不是一种安全的方法,但它确实可以让某人真正找到密钥。
标签: string delphi memory encryption