我需要在内存中短时间存储用户密码。我该怎么做却又不会在核心转储或回溯中意外泄露此类信息?有没有一种方法可以将值标记为“敏感”,因此调试器不会将其保存在任何地方?

最佳答案

编辑

我已经提出了使用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/

10-12 06:01