2013-12-12 70 views
1

我已經編寫了一個PySide應用程序,它需要將用戶名和密碼發送到在線服務器。 我在用戶通過QLineEdit小部件輸入密碼後對密碼進行了加密,但因爲這只是python代碼,所以任何用戶都可以在加密之前打開文件並修改代碼以竊取密碼。 分發pyc文件並不能提高安全性,因爲可以反編譯AFAIK。用於安全密碼處理的pyside部件

所以我的想法是讓某人在C++中編寫一個定製的QT小部件,並使用相應的PySide綁定,這將是一個修改後的QLineEdit,它永遠不會存儲純文本,而只會基於外部密鑰加密文本。這是一個愚蠢的想法?它可行嗎? 還有其他的選擇嗎? 你們會如何處理這個問題?

乾杯, 坦率

+0

我會計算源代碼或整個軟件包的校驗和,然後公開校驗和。這種方式和一個很好的工具(需要自己檢查),每個用戶都可以檢查代碼沒有被修改。但是在運行時它仍然可以被修改。 – Trilarion

回答

0

在第一種情況下,你應該確保你aren't echoing the password to the screen。但是,確保QLineEdit從不存儲完整密碼可能不可能安全。

您可以重寫keystroke命令,並加密每個傳入的字符。但是每個字符的加密現在還沒有真正完成,至少在A=E或你有什麼形式。

當附加字母進來時,您可以對字符串進行漸進式散列,但這意味着用戶有1次嘗試輸入密碼,因爲它們不能退格。任何錯誤,例如滑動的手指,例如輸入g而不是f將意味着需要清除整個密碼並重新開始 - 這不是一個非常友好的用戶界面。

關於您擔心某人編輯您的代碼,然後在輸入密碼的用戶之間捕獲密碼,並將其發送出去,您就會在這裏偏執。一定程度上,一旦你發送了你的代碼,你幾乎無法控制它。您可以使用相應部件的適當MD5散列來分發代碼,並且可以在運行時檢查以確保代碼未被更改。即使如此,如果有人有能力向程序中注入任意代碼,那麼你就有更大的問題。我並不是說你的程序是不安全的,但如果有人惡意使用代碼訪問計算機,他們可以輕鬆插入硬件或軟件鍵盤記錄程序,使你的所有嘗試都無所作爲。

儘可能安全地編寫代碼,接受某個時候密碼將在某個明文中並在第一個可用機會編碼。例如:

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

感謝您的信息。這是我第一次處理這種情況,所以我非常欣賞這種輸入! –

1

不是一個「愚蠢」的想法。只是它不起作用。

所有人需要做的就是編輯代碼的其他部分,並在QApplication實例上安裝event filter。有了它,他們就可以捕捉每一個鍵盤事件,甚至在它到達您的定製QLineEdit之前。

試圖圍繞你的PySide應用程序的一部分永遠不會工作。在一天結束時,這是一個Python程序。即使試圖通過將整個應用程序凍結爲可執行文件來隔離整個應用程序,也伴隨着一系列警告(請參閱「How do I protect Python code?」,以進行一些有用的討論)。

永遠會堵塞所有孔,不管你做什麼(不管你用什麼語言或庫)。

在某些時候,您只需要屏氣,在某處繪製一條人造線,然後將其留在那裏。

+0

很好的一點,謝謝。我會多讀一點,並以某種方式作出決定 –