我想创建一个程序,要求用户,在这个例子中,让我们说一个用户名和密码,然后存储这个(我假设在一个文本文件中)。我正在努力的领域是如何让用户更新存储在文本文件中的密码?我正在用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