Search code examples
pythondjangohashiterationencode

TypeError : encode() missing 1 required positional argument: 'iterations'


i dont know what is triggering this error. i dont know why i keep getting this error . i already change a few parts of code and still i get this error . i have been trying to fix it for 2 days .

Traceback:

File "C:\Users\Adila\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\exception.py" in inner
  41.             response = get_response(request)

File "C:\Users\Adila\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\Adila\AppData\Local\Programs\Python\Python35\lib\site-packages\django\core\handlers\base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\Adila\Documents\tryFOUR\src\register\views.py" in register
  13.           user = form.save()

File "C:\Users\Adila\Documents\tryFOUR\src\custom_user\forms.py" in save
  50.       user.set_password(self.cleaned_data["password2"])

File "C:\Users\Adila\AppData\Local\Programs\Python\Python35\lib\site-packages\django\contrib\auth\base_user.py" in set_password
  105.         self.password = make_password(raw_password)

File "C:\Users\Adila\AppData\Local\Programs\Python\Python35\lib\site-packages\django\contrib\auth\hashers.py" in make_password
  84.     return hasher.encode(password, salt)

Exception Type: TypeError at /accounts/register/
Exception Value: encode() missing 1 required positional argument: 'iterations'

hashers.py :

from django.contrib.auth.hashers import PBKDF2PasswordHasher
from django.utils.crypto import (get_random_string, pbkdf2)
from honeywordHasher.models import Sweetwords

class MyHoneywordHasher(PBKDF2PasswordHasher):
    algorithm = "honeyword_base9_tweak3_pbkdf2_sha256"
    iterations = PBKDF2PasswordHasher.iterations*3

    def hash(self, password, salt, iterations):
        hash = pbkdf2(password, salt, iterations, digest=self.digest)
        return base64.b64encode(hash).decode('ascii').strip()

    def salt(self):
        salt = get_random_string()
        while Sweetwords.objects.filter(salt=salt).exists():
            salt = get_random_string()

        return salt 

    def verify(self, password, encoded):
        algorithm, iterations, salt, dummy=encoded.split('$',3)
        hashes = pickle.loads(Sweetwords.objects.get(salt=salt).sweetwords)
        hash = self.hash(password, salt, int(iterations))
        if hash in hashes:
            return honeychecker.check_index(salt, hashes.index(hash))
        return False

    def encode(self, password, salt, iterations):
        sweetwords = ['hilman95']
        sweetwords.extend(honey_gen.gen(password, base64, ["passfiles.txt"]))
        for i in range(base64 + 1):
            sweetwords.extend(honeywordtweak.tweak(password[i], 3))
            random.shuffle(sweetwords)

        hashes = []
        for swd in sweetwords:
            hashes.append(self.hash(swd, salt, iterations))
        self.honeychecker.update_index(salt, sweetwords.index(password))
        h = Sweetwords(salt=salt, sweetwords = pickle.dumps(hashes))
        h.save()
        return "%s$%d$%s$%s" %(self.algorithm, iterations, salt, hashes[0])

can someone explain why i keep getting this error please ? i have spend hours searching all the related questions here and nothing solves it .


Solution

  • def encode(self, password, salt, iterations=None):
        if iterations is None:
            iterations = self.iterations
        # then ur code......