2017-09-17 1 views
0

사용자에게이 예에서 사용자 이름과 암호를 말한 다음 텍스트 파일로 저장하도록 요청하는 프로그램을 만들려고합니다. 내가 고민하고있는 영역은 사용자가 텍스트 파일에 저장된 비밀번호를 업데이트하도록 허용하는 방법입니다. 파이썬에서이 글을 쓰고있다.사용자 이름과 비밀번호를 저장 한 다음 사용자 업데이트를 허용합니다. Python

+3

_ **하시기 바랍니다 **하지 ** 지금 ** 가게에 분할 그것을 도울 수 없어요 암호는 일반 텍스트로 사용됩니다 ._ 작성한 코드로는 해시되고 소금물 처리되어야합니다. 사용할 수있는 인증 라이브러리가 많이 있습니다. 어쨌든, 데이터베이스를 데이터베이스로 사용하면 고통스럽지 않을 것입니다.이들은 데이터 추가, 데이터 검색, 데이터 수정 및 데이터 삭제를 위해 설계되었습니다. SQLite는 Python에 포함되어 있으며 매우 쉽게 작업 할 수 있습니다. – Chris

+0

파이썬에 포함 된 또 다른 "데이터베이스"는 [shelve] (https://docs.python.org/3.6/library/shelve.html)로 SQLite보다 훨씬 쉽습니다. –

+2

@Chris 간단히 "해시되고 소금에 절인"은 암호 유효성 검사기로는 충분하지 않습니다. 대신 HMAC를 무작위로 약 100ms 동안 반복하고 해시로 소금을 저장하십시오. 'PBKDF2','Rfc2898DeriveBytes','password_hash','Bcrypt','passlib.hash' 또는 유사한 함수와 같은 함수를 사용하는 것이 더 낫습니다. 요점은 공격자가 무차별 한 암호를 찾기 위해 상당한 시간을 소비하게하는 것입니다. – zaph

답변

0

업데이트 내용을 텍스트 파일로 처리하는 방법에 중점을두기 위해 질문에 집중했습니다. 따라서 실제로 텍스트 파일의 길이와 구조에 영향을 줄 때 텍스트 파일에서 변경되는 사항에 대해 어떻게 생각하십니까? 이 질문은 텍스트 파일에있는 암호와 무관합니다. 암호를 저장해야하는지 또는 암호를 확인하는 데 사용할 수있는 수량을 저장해야하는지 여부와 관련된 중요한 문제가 있습니다. 당신이하려는 일, 당신의 보안 모델, 당신의 프로그램이 상호 작용할 필요가있는 것에 달려 있습니다. 당신은 문제의 텍스트 파일 업데이트 부분에 초점을 맞추어 귀하의 질문에 대한 범위를 벗어난 모든 것을 판결했습니다.

당신은이 작업을 수행하기 위해 다음과 같은 패턴을 채택 할 수 있습니다 텍스트 파일이 존재하는 경우 초에

  • 참조하십시오. 읽고 새 사용자가 아닌 업데이트를한다고 가정하십시오.

  • 사용자 이름과 암호를 물어보십시오. 이전 값으로 업데이트하라는 메시지이고 변경 가능하면

  • 텍스트 파일을 작성하십시오.

텍스트 파일에 저장된 내용을 업데이트하는 대부분의 전략에는 모든 업데이트마다 텍스트 파일을 완전히 다시 쓰는 작업이 포함됩니다.

-2

당신이 가지고있는 단일 사용자 응용 프로그램입니까? 당신이

어려움을 겪고있는 곳 좀 더 자세한 정보를 제공 할 수있는 경우 (사용자 이름과 암호를 가지고) 암호 파일을 읽을 수 - 사용자 인증하고는, 텍스트 파일 의 조합에 대한 사용자 이름과 암호와 일치 할 때 - 때 사용자 암호를 변경하려면 사용자가 이전 암호와 새 암호를 제공하십시오. 사용자 이름과 이전 비밀번호 조합을 텍스트 파일에있는 것과 비교하여 일치하면 일치하는 새 파일을 저장합니다.

-2

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 

뭔가,하지만 그것을 테스트하지 않은 작동합니다.

또한 암호를 항상 암호화해야합니다.

+1

암호를 암호화하지 말고, 암호 검증기를 저장하십시오. @Chris fr 세부 사항에 대한 응답 주석을 참조하십시오. 하지만 예제 코드는 일반 텍스트 암호를 저장하지 않습니다! – zaph

+0

또한 'pass'변수를 사용하지 마십시오. ['pass'는 Python의 키워드입니다.] (https://docs.python.org/3.7/reference/lexical_analysis.html#id8). – Chris

0
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 : 나는 몇 가지 기능에 내 코드 분할 싶어하지만 난 그렇게 일부 기능

+0

@Chris @ this 또한이 코드의 일부분을 분리하고 싶지만, (salt)가 어떤 함수에서든 변경 될 것이고 파일에 저장하기 때문에 코드를 업데이트하고 개선하도록 도와 줄 수 있습니다. it –

+0

이 질문에 전혀 대답하지 않습니다 : 그것은 텍스트 파일과 상호 작용하지 않고 암호 관리에 중점을 둡니다. –

+0

@Sam Hartman Ok 우리는 안전하지 않은 텍스트 파일로 작업 할 수 없으며 그렇게해서는 안됩니다. Chris가 텍스트가 안전하지 않으며 암호를 안전한 방법으로 저장해야한다고 말한 것처럼 –

관련 문제