2017-10-26 1 views
0

django 기본 사용자 테이블을 사용하지 않으므로 사용자 이름과 해시 암호가있는 사용자 테이블을 만들었습니다. 나는 데이터베이스에 게시 할 때 make_password()를 사용하여 암호를 해시했지만 사용자 입력 암호 해시와 동일한 방법을 사용하여 데이터베이스에서 정보를 검색하려고 시도했을 때 동일한 암호에 대해 다른 해시를 얻습니다. 아래는 사용자를 저장하고 세부 정보를 검색하기위한보기 코드입니다. 소금의Make_Password가 동일한 암호에 대해 다른 해시 값을 반환합니다.

view.py

class HMUser(APIView): 
    def post(self, request): 
    request.data['password'] = make_password(request.data['password']) 
    print(request.data['password']) 
    serialize = serializers.HMUserSerializer(data=request.data) 
    if serialize.is_valid(): 
     serialize.save() 
     return Response(1, status=status.HTTP_201_CREATED) 
    return Response(serialize.errors, 
    status=status.HTTP_400_BAD_REQUEST) 


class Login(APIView): 
    def get(self, request, username, password): 
    print("pass ", password) 
    userpassword = make_password(password) 
    print("Hash", userpassword) 
    user_details = models.HMUser.objects.get(username=username, 
    password=userpassword) 
    serialize = serializers.HMUserSerializer(user_details) 
    return Response(serialize.data) 
+0

감사합니다. Mahesh 님, 저는 사용자 이름과 비밀번호를 모두 사용하고 있지만 일반 인증 프로세스 인 해시 된 비밀번호 만 사용하고 있습니다. 나는 내가 해싱 할 때 뭔가 잘못하고 있다고 생각한다. –

+0

당신이 관찰하는 것을 소금과 의도 된 보안 기능이라고합니다. –

+0

고마워, 그래서 내가 그 문제를 해결할 것을 제안합니까 ?? –

답변

0

불일치가 문제입니다

소금 종자 또는 암호에 추가로 사용되는 임의의 숫자에는 소금이 없기 때문에,보다 안전하게 만드는 것입니다 런타임시 동일한 암호에 대해 매번 새로운 값을 생성하여 무작위로 생성됩니다.

이상적인 방법은 비밀번호를 생성하고 검증하는 동안은 동일 그 소금 사용을 보장 할 필요가 make_password(salt='mySalt',password=realPassword)

같은,

해결 방법은 자신의 소금을 지정하는 것입니다 훨씬 더 친절 check_password()을 사용하는 것입니다 .

+0

** 고정 소금을 사용하지 마십시오 !! ** 소금의 목적을 완전히 상실하고 데이터베이스의 모든 암호에 대해 암호 해시를 병렬 계산할 수 있습니다. – knbk

+0

이 작품 ... 고마워요. –

관련 문제