我想創建一個程序,要求用戶,在這個例子中,讓我們說一個用戶名和密碼,然後存儲這個(我假設在一個文本文件中)。我正在努力的領域是如何讓用戶更新存儲在文本文件中的密碼?我正在用Python寫這個。存儲用戶名和密碼,然後允許用戶更新。蟒蛇
回答
因爲您已經要求關注如何處理文本文件中的更新,所以我專注於您的問題的這一部分。所以,實際上我已經專注於回答在這些更改影響文本文件的長度和結構時如何改變文本文件中的某些內容。這個問題與文本文件中的密碼無關。 您是否應該存儲密碼,或者是否應該存儲一些可用於驗證密碼的數量等問題都存在很大的問題。所有這一切取決於你想要做什麼,你的安全模型是什麼,以及你的程序需要與什麼交互。您已經通過要求我們專注於問題的文本文件更新部分來排除您的問題的範圍。
你可能會採用以下方式來完成這項任務:
剛開始看文本文件是否存在。閱讀它,如果是這樣,假設你正在做一個更新,而不是一個新的用戶
要求輸入用戶名和密碼。如果它是帶有舊值的更新提示,並允許它們更改,請將其寫入文本文件。
寫出文本文件。
更新存儲在文本文件中的東西的大多數策略都涉及在每次更新時完全重寫文本文件。
這是一個單用戶應用程序,你有嗎?如果你能在那裏你掙扎
提供更多的信息,一個可以讀取密碼文件(其用戶名和密碼) - 當用戶進行身份驗證,匹配到文本文件 組合中的用戶名和密碼 - 當用戶想要更改密碼,然後用戶提供新舊密碼。用戶名和舊密碼組合與文本文件中的組合進行比較,如果匹配,則存儲新的
嘗試使用JSON。 一個JSON文件的一個例子是這樣的:
{
"Usernames": {
"Username": [
{
"Password": "Password123"
}
]
}
}
然後編輯JSON:
jsonloads = json.loads(open('json.json').read()) #Load the json
username = input("Enter your username: ") #Get username as a string
for i in jsonloads["Usernames"]: #Iterate through usernames
if i == username: #If the username is what they entered
passw = input("New password: ") #Ask for new password
jsonloads["Usernames"][i][0]["Password"] = passw #Set the password
jsonFile = open("json.json", "w+") #Open the json
jsonFile.write(json.dumps(jsonloads, indent=4)) #Write
jsonFile.close() #Close it
break #Break out of the for loop
else: #If it remains unbroken
print("You aren't in the database. ")
user = input("Username: ") #Ask for username
passw = input("Password: ") #Ask for password for username
item = {"Password":pass} #Make a dict
jsonloads["Usernames"].update({user: item}) #Add that dict to "Usernames"
with open('json.json','w') as f: #Open the json
f.write(json.dumps(jsonloads, indent=4)) #Write
類似的東西應該工作,沒有雖然進行了測試。
此外,請記住始終加密密碼!
import getpass
import os
import bcrypt
new=None
def two_hash():
master_key = getpass.getpass('enter pass word ')
salt = bcrypt.gensalt()
combo = salt + master_key
hashed = bcrypt.hashpw(combo , salt)
allow = raw_input('do you want to update pass ')
if allow == 'y':
new = getpass.getpass('enter old pass word ')
combo = salt + new
bcrypt.hashpw(combo , salt)
if (bcrypt.hashpw(combo , salt) == hashed):
new = getpass.getpass('enter new pass ')
print new
else :
pass
if __name__ == '__main__':
two_hash()
注1:我想我的代碼拆分爲一些功能,但我不能這樣幫助分裂它的一些功能
@Chris檢查這我也想分開這段代碼的一部分,但我不能做到這一點,因爲(鹽)將改變任何功能,我想將它保存到文件可以更新我的代碼,並幫助我提高它 –
這根本不回答問題:它側重於密碼管理而不是與文本文件交互。 –
@Sam Hartman好吧,我們不能也不應該使用任何不安全的文本文件!正如克里斯說文本不安全,我們必須以安全的方式存儲密碼 –
- 1. 存儲用戶名和密碼,然後用戶想要檢索用戶信息,但密碼是加密的
- 2. 允許用戶更改SVN密碼
- 3. ;允許用戶更改密碼?
- 4. 設計,允許用戶更改密碼
- 5. 存儲用戶名和密碼
- 6. iPhone cookies存儲用戶名和密碼
- 7. 用戶名和密碼存儲位置
- 8. Xcode:存儲用戶名和密碼
- 9. 存儲演示用戶名和密碼
- 10. 蟒蛇smtp檢查用戶名和密碼是否正確
- 11. 蟒蛇用戶名和密碼限制驗證爲x試圖
- 12. 允許用戶編輯和存儲HTML
- 13. 存儲iOS應用程序的用戶密碼和用戶名
- 14. 我允許詢問並存儲用戶的itunesconnect密碼嗎?
- 15. 使用加密算法來存儲和檢索用戶名和用戶密碼
- 16. 允許用戶使用谷歌地圖添加密碼和存儲位置
- 17. 與用戶名分開存儲密碼
- 18. 允許用戶沒有密碼?
- 19. 登錄許多用戶使用一個用戶名和密碼
- 20. C#:詢問用戶密碼,然後存儲在SecureString中
- 21. 如果用戶名和舊密碼匹配,更新密碼
- 22. Android應用程序存儲和呼叫用戶名和密碼
- 23. 如何以加密形式存儲用戶名和密碼?
- 24. 允許用戶從我的S3存儲
- 25. 如果用戶存在然後更新
- 26. Passportjs LocalStrategy允許比默認用戶名和密碼更多的參數嗎?
- 27. iPhone SDK:在代碼中存儲用戶名和密碼
- 28. Facebook - 允許用戶指定用戶名
- 29. Magit保存密碼和用戶名
- 30. 用戶名和密碼不保存
_ ** **請不要** **過店密碼爲純文本。他們需要被哈希和醃製,理想情況下不需要用你編寫的代碼。有大量的認證庫可用。無論如何,如果你使用數據庫作爲數據庫,那麼我認爲你的痛苦時間會少得多。它們旨在增加數據,查找數據,修改數據和直接刪除數據。 SQLite包含在Python中,並且相當容易使用。 – Chris
Python中包含的另一個「數據庫」是[shelve](https://docs.python.org/3.6/library/shelve.html),它比SQLite更容易。 –
@Chris簡單地說,「哈希和鹽漬」不足以用於密碼驗證程序。相反,用隨機鹽迭代HMAC約100ms持續時間,然後用散列表保存鹽。更好的是使用諸如'PBKDF2','Rfc2898DeriveBytes','password_hash','Bcrypt','passlib.hash'或類似函數的函數。關鍵是要讓攻擊者花費大量時間通過暴力破解密碼。 – zaph