Qt QLineEdit密码安全

Qt QLineEdit密码安全,qt,passwords,Qt,Passwords,在我的应用程序中,用户在QLineEdit中键入密码。 QLineEdit在密码回显模式下工作 当不再需要密码时,应用程序必须清除内存中的密码 QLineEdit是否确保在释放所有内部内存缓冲区之前清除它们?我在文件中找不到这样的信息 如果QLineEdit没有清除其内容,那么实现这种行为的最简单方法是什么?我想尽可能地重用QLineEdit功能,不想从头开始实现自己的密码编辑控件。有可能吗?我想打电话 QLineEdit::setText(""); 我会做好的。正如Qt所说: 设置此属性将清

在我的应用程序中,用户在
QLineEdit
中键入密码。
QLineEdit
在密码回显模式下工作

当不再需要密码时,应用程序必须清除内存中的密码

QLineEdit
是否确保在释放所有内部内存缓冲区之前清除它们?我在文件中找不到这样的信息

如果
QLineEdit
没有清除其内容,那么实现这种行为的最简单方法是什么?我想尽可能地重用
QLineEdit
功能,不想从头开始实现自己的密码编辑控件。有可能吗?

我想打电话

QLineEdit::setText("");
我会做好的。正如Qt所说:

设置此属性将清除选择,清除撤消/重做 历史记录,将光标移动到行尾并重置 将属性修改为false


相反,调用
QLineEdit::clear()
将只清除文本,但撤消/重做堆栈仍将包含以前的文本。

请注意,即使在调用
setText({})
时也不是完全安全的-如果您的应用程序被调出,字符串可能会写入交换空间。防止这种情况发生的唯一方法是为
lineEdit
的内部字符串分配内存,并对其调用
mlock()
,以防止交换。为此,您需要编写自己的
lineEdit

此外,在将运行时自省工具(如应用程序)附加到应用程序时,很难理解文本,因为它是一个正常的
QObject
属性,存储在RAM中时会混淆

另外,通过查看
QWidgetLineControl::internalSetText
(请参阅)的实现,行编辑文本似乎可用于辅助功能接口,每个人都可以访问该接口,除非辅助功能支持未编译到Qt中


因此,根据您的安全级别,您确实需要自己的实现。

即使内部字符串表示形式是
free()
'd,但这并不意味着字符串被覆盖。解除分配通常不会覆盖内存,因此即使在调用
setText({})
之后,字符串仍然可用。至少在这之前做一个
setText(“aaaaaaaaaaaa…”)