<p>使用python时,我遇到了一个有趣的问题:我的脚本读取一些敏感信息,我希望数据一经使用就被彻底清除。比如:</p>
<pre><code>try:
useData(sensitiveString)
except:
print("There was a problem executing useData()")
finally:
scrubFromMemory(sensitiveString)
</code></pre>
<p>这是为了最大限度地减少即使在发生错误的情况下,仍然驻留在内存中的sensitiveString的可能性。
我考虑过改变字符串,比如:</p>
<pre><code>sensitiveString = "*" * (len(sensitiveString)-1) # does this overwrites memory, or creates a new object?
sensitiveString = "*" * 10000 # sensitive string is guaranteed to be relatively short
del sensitiveString
gc.collect()
</code></pre>
<p>但我在某处读到,在python中(由于c实现),对字符串的修改将导致在内存中创建一个新的字符串对象。因此,原始的sensitiveString仍然可以“ghost”存在于应用程序的内存转储中。我想避免这样。
编辑:typo-gc.collect()而不仅仅是gc()</p>
<p>有没有什么建议可以让我完全从记忆中抹去敏感性</p>