假设我将密码以纯文本形式存储在名为的变量中passWd
作为字符串。
一旦我放弃这个变量,python如何释放它(例如,使用del passWd
or passWd= 'new random data'
)?
字符串是否存储为字节数组,这意味着它可以在最初存在的内存位置中被覆盖,或者它是内存区域中的固定集合,无法修改,并且当分配新值时,新的内存区域是创建并且旧区域被丢弃但未被 null 覆盖?
我想知道Python是如何实现内存区域的安全性的,并且想了解更多,主要是因为我很好奇:)
根据我迄今为止收集到的信息,使用del
(or __del__
)导致解释器不会自动释放该变量的内存区域,这可能会导致问题,而且我也不确定del删除这些值是如此令人沮丧。但这只是我收集到的信息,而不是黑白分明的:)
我问的主要原因是,我打算编写一个移交应用程序,它获取一个字符串,执行一些 I/O,将其传递到另一个子系统(例如树莓派的引导加载程序),并且接口是用Python(这在某些人的耳朵里听起来是多么奇怪......)并且我并不担心数据在 I/O 计算期间受到损害,而是担心在两个子系统切换之间可能会发生内存转储。或者如果系统被冻结(比如休眠),比如系统启动 20 分钟后,我尽可能快地删除了变量,但不知怎的,尽管我做了一个,但它仍然在内存中del passWd
:)
(Ps.我已经问过超级用户,他们推荐我来这里,我很抱歉语法不好!)
除非您使用自定义编码输入方法来获取密码,否则它将出现在比不可变字符串更多的地方。所以不用太担心。
操作系统应注意在将内存分配给另一个进程之前清除进程中的所有数据。如果页面被复制到磁盘(换出或休眠),这当然可能会失败。
安全的密码输入并不容易。也许您可以找到一个特殊的库或模块来处理这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)