Make_Password为相同的密码返回不同的哈希值

时间:2017-10-26 10:37:30

标签: python django

我不想使用django默认用户表,所以我创建了一个用户名和散列密码的用户表。我在发布到数据库时使用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)

1 个答案:

答案 0 :(得分:0)

盐的不匹配是你的问题,

Salt是种子或随机数,除了密码之外还使用它来使其更安全。由于没有指定salt,它在运行时生成随机值,每次为相同的密码创建新值。

理想的方式是使用更友好的check_password()

解决方法是指定自己的盐,例如make_password(salt='mySalt',password=realPassword)

您需要确保在创建密码和验证时使用盐是相同的。