我需要在内存中短时间存储用户密码。我该怎么做却又不会在核心转储或回溯中意外泄露此类信息?有没有一种方法可以将值标记为“敏感”,因此调试器不会将其保存在任何地方?
最佳答案
编辑
我已经提出了使用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上运行。更长的记录是here。
在Python中解密和加密将无法进行。字符串和整数是固定且持久的,这意味着您到处都留下一堆密码信息。
哈希是标准答案,尽管当然最终需要在某个地方处理纯文本。
正确的解决方案是将敏感过程作为C模块进行。
但是,如果您的内存不断受到损害,我会重新考虑您的安全设置。
关于python - 在python中将数据标记为敏感,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/982682/