我想从内存中删除密码,信用卡号等机密字符串。
在C#中,有一个名为SecureString的类。
但是在VB6中,我没有找到任何解决方案。
有没有办法从内存中完全删除字符串?
答案 0 :(得分:4)
SecureString
在静止时加密,这不仅仅是提供一种方法来阻止它留在内存中。
有没有办法从内存中完全删除字符串?
是的,您需要在原位修改字符串并覆盖其内容。
您可以在LHS模式下使用mid$()
执行此操作:
Dim i As Long
For i = 1 To Len(secret)
Mid$(secret, i, 1) = "0"
Next
使用ZeroMemory
或CopyMemory
API:
ZeroMemory ByVal StrPtr(secret), LenB(secret)
...
CopyMemory ByVal StrPtr(secret), ByVal StrPtr(String$(Len(secret), "0")), LenB(secret)
对于加密,您可以实施DPAPI CryptProtectData
API(SecureString
所基于的内容)。