我需要在内存中短时间存储用户密码。我该怎么做却又不会在核心转储或回溯中意外泄露此类信息?有没有一种方法可以将值标记为“敏感”,因此调试器不会将其保存在任何地方?
编辑
我已经提出了使用ctypes(反过来使用C)零内存的解决方案。
import sys import ctypes def zerome(string): location = id(string) + 20 size = sys.getsizeof(string) - 20 memset = ctypes.cdll.msvcrt.memset # For Linux, use the following. Change the 6 to whatever it is on your computer. # memset = ctypes.CDLL("libc.so.6").memset print "Clearing 0x%08x size %i bytes" % (location, size) memset(location, 0, size)
我不保证此代码的安全性。经过测试可在x86和CPython 2.6.2上运行。更长的文章在这里。
在Python中解密和加密将无法进行。字符串和整数是固定且持久的,这意味着您到处都留下一堆密码信息。
哈希是标准答案,尽管当然最终需要在某个地方处理纯文本。
正确的解决方案是将敏感进程作为C模块进行。
但是,如果您的内存不断受到损害,我会重新考虑您的安全设置。