用于安全密码处理的pyside小部件

时间:2013-12-12 21:36:35

标签: python qt encryption pyqt pyside

我编写了一个PySide应用程序,需要将用户名和密码发送到在线服务器。 我在用户通过QLineEdit小部件输入密码后加密密码,但由于这只是python代码,任何用户都可以打开文件并在加密前修改代码以窃取密码。 分发pyc文件并没有太大的安全性,因为那些可以被反编译为AFAIK。

所以我的想法是让某人在C ++中使用相应的PySide绑定编写自定义QT窗口小部件,这些绑定将是一个从不存储纯文本的修改后的QLineEdit,而只是基于外部密钥的加密文本。这是一个愚蠢的想法吗?它可行吗? 还有其他选择吗? 你们会怎么处理这个?

干杯, 坦率

2 个答案:

答案 0 :(得分:1)

不是一个“愚蠢”的想法。只是它不起作用。

所有人都必须编辑代码的其他部分并在QApplication实例上安装event filter。有了这些,他们可以在它到达您的自定义QLineEdit之前捕获每个键盘事件。

尝试屏蔽部分PySide应用程序永远不会起作用。在一天结束时,这是一个python程序。即使试图通过将整个应用程序冻结成可执行文件来阻止整个应用程序,也需要提出一系列警告(请参阅“How do I protect Python code?”进行一些有用的讨论)。

无论您做什么(无论您使用何种语言或库),永远永远不会插入所有漏洞。

在某些时候,你只需要屏住呼吸,在某处画一条人造线,并留在那里。

答案 1 :(得分:0)

首先,您应该确保aren't echoing the password to the screen。但是,确保QLineEdit永远不会存储完整密码可能无法安全。

您可以覆盖击键命令,并加密每个传入的角色。但是现在每个角色的加密并没有真正完成,至少以A=E或你有什么形式。

当附加字母进入时,您可以对字符串进行渐进式哈希,但这意味着用户有1次尝试输入密码,因为它们无法退格。任何错误,例如手指滑动,例如输入g而不是f都意味着需要删除整个密码并重新开始 - 而不是非常友好的用户界面。

关于你担心有人编辑你的代码,然后在输入它的用户和被发送的用户之间捕获密码,你在这里是偏执狂。在您发送代码后,在某种程度上,您几乎无法控制它。您可以使用适当的MD5哈希为相关部件分发代码,并且可以在运行时检查以确保代码未被更改。

即便如此,如果有人能够将任意代码注入您的程序,那么您就会遇到更大的问题。我并不是说你的程序不安全,但是如果有人恶意访问带有代码的计算机,他们可以轻松地插入硬件或软件键盘记录器,使你的所有尝试都没有用。

尽可能安全地编写代码,接受在某些时候密码将以明文形式存在,并在第一个可用的机会对其进行编码。例如:

import mySecureLibrary
password = mySecureLibrary.saltAndHash(self.ui.passwordField.text())
self.ui.passwordField.setText("HAHA, no password for you")