在第一種情況下,你應該確保你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")
我會計算源代碼或整個軟件包的校驗和,然後公開校驗和。這種方式和一個很好的工具(需要自己檢查),每個用戶都可以檢查代碼沒有被修改。但是在運行時它仍然可以被修改。 – Trilarion