사용자에게이 예에서 사용자 이름과 암호를 말한 다음 텍스트 파일로 저장하도록 요청하는 프로그램을 만들려고합니다. 내가 고민하고있는 영역은 사용자가 텍스트 파일에 저장된 비밀번호를 업데이트하도록 허용하는 방법입니다. 파이썬에서이 글을 쓰고있다.사용자 이름과 비밀번호를 저장 한 다음 사용자 업데이트를 허용합니다. 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 @ this 또한이 코드의 일부분을 분리하고 싶지만, (salt)가 어떤 함수에서든 변경 될 것이고 파일에 저장하기 때문에 코드를 업데이트하고 개선하도록 도와 줄 수 있습니다. it –
이 질문에 전혀 대답하지 않습니다 : 그것은 텍스트 파일과 상호 작용하지 않고 암호 관리에 중점을 둡니다. –
@Sam Hartman Ok 우리는 안전하지 않은 텍스트 파일로 작업 할 수 없으며 그렇게해서는 안됩니다. Chris가 텍스트가 안전하지 않으며 암호를 안전한 방법으로 저장해야한다고 말한 것처럼 –
- 1. 사용자 모델의 속성 업데이트를 한 번만 허용합니다.
- 2. 사용자 이름과 비밀번호를 사용하여 로그인하십시오.
- 3. 강제로 사용자 이름과 비밀번호를 요구하도록 강요하십시오.
- 4. 사용자 이름과 비밀번호를 저장하고 읽는 키 체인
- 5. Django admin - 사용자 생성시 사용자 이름과 비밀번호를 이메일로 보내십시오.
- 6. jquery ajax를 사용하여 사용자 이름과 비밀번호를 전송합니다.
- 7. URL을로드하기위한 URL을로드하기 전에 사용자 이름과 비밀번호를 입력하십시오.
- 8. ASP.Net 세션 쿠키에 사용자 비밀번호를 저장 하시겠습니까?
- 9. Spring에서 사용자 이름과 비밀번호를 입력하여 메일 보내기
- 10. 사용자 이름과 비밀번호를 반복해서 입력하는 스크립트가 필요합니다.
- 11. 사용자 이름과 비밀번호를 사용하여 Gmail에 로그인
- 12. 사용자 이름과 비밀번호를 게시하여 UIWebView에 URL을로드 하시겠습니까?
- 13. 각도 js에서 사용자 이름과 비밀번호를 일치시키는 방법 ....?
- 14. SFTP는 사용자 이름과 비밀번호를 안전하게 전송합니까?
- 15. 사용자 이름과 암호 조합 저장
- 16. 세션 아이폰에 사용자 이름과 비밀번호 저장
- 17. Python 3.6의 사용자 이름과 암호
- 18. 앱 사용자 로그인 사용자 이름과 비밀번호를 확인하는 방법
- 19. iOS 키 체인에 여러 사용자 이름과 비밀번호를 저장하려면 어떻게해야합니까?
- 20. Python 하위 프로세스가 사용자 상호 작용을 허용합니다.
- 21. phpmyadmin 사용자 이름과 비밀번호
- 22. 로그인 화면에 사용자 이름과 비밀번호를 저장하는 방법 오픈 ERP
- 23. python fabric 사용자 비밀번호를 설정하는 방법
- 24. 사용자 이름과 JavaMail의 차이점
- 25. Django Python 사용자 비밀번호를 암호화하는 방법
- 26. 키 체인을 사용하여 사용자 이름과 비밀번호를 인증하는 방법
- 27. android에서 wcf 웹 서비스를 호출하여 사용자 이름과 비밀번호를 인증하는 방법은 무엇입니까? 요청과 함께 사용자 이름과 비밀번호를 전달하는 방법
- 28. 로그인 스크립트가 작동하지 않고 사용자 이름과 비밀번호를 일치시킬 수 없습니다.
- 29. @ 사용자 이름과 @picklist의 사용자 비교
- 30. ajax를 사용하여 사용자 이름과 비밀번호를 보내는 것이 안전합니까?
_ **하시기 바랍니다 **하지 ** 지금 ** 가게에 분할 그것을 도울 수 없어요 암호는 일반 텍스트로 사용됩니다 ._ 작성한 코드로는 해시되고 소금물 처리되어야합니다. 사용할 수있는 인증 라이브러리가 많이 있습니다. 어쨌든, 데이터베이스를 데이터베이스로 사용하면 고통스럽지 않을 것입니다.이들은 데이터 추가, 데이터 검색, 데이터 수정 및 데이터 삭제를 위해 설계되었습니다. SQLite는 Python에 포함되어 있으며 매우 쉽게 작업 할 수 있습니다. – Chris
파이썬에 포함 된 또 다른 "데이터베이스"는 [shelve] (https://docs.python.org/3.6/library/shelve.html)로 SQLite보다 훨씬 쉽습니다. –
@Chris 간단히 "해시되고 소금에 절인"은 암호 유효성 검사기로는 충분하지 않습니다. 대신 HMAC를 무작위로 약 100ms 동안 반복하고 해시로 소금을 저장하십시오. 'PBKDF2','Rfc2898DeriveBytes','password_hash','Bcrypt','passlib.hash' 또는 유사한 함수와 같은 함수를 사용하는 것이 더 낫습니다. 요점은 공격자가 무차별 한 암호를 찾기 위해 상당한 시간을 소비하게하는 것입니다. – zaph