떠오르는 암호화툴: Argon2

Kepler·2020년 4월 13일
1

2015년에 Password Hashing Competition에서 우승한 암호화 세계의 떠오르는 강자(?) 인 argon2를 소개한다.

왜 bcrypt가 아니라 argon2 를 써야 하는가에 대해서는 여기를 참조.

설치

pip install argon2-cffi

사용

from argon2 import PasswordHasher

ph = PasswordHasher()
hash = ph.hash("<hash할pw값을입력>")
hash  #이런식으로 hash된다
>>>'$argon2id$v=19$m=102400,t=2,p=8$tSm+JOWigOgPZx/g44K5fQ$WDyus6py50bVFIPkjA28lQ'

# verify
ph.verify(hash, "<비교할pw의 string값>")
>>> True

# oudated된 hash인지를 확인할수 있다
ph.check_needs_rehash(hash)
>>> False

ph.verify(hash, "t0t411ywr0ng")

장고에서 사용 예시

cryptographic fuction은 bytes strings에서만 작동하므로, .encode()로 데이터를 바꿔주는 것을 잊지말자.

class LogInView(View):
    def post(self, request):
        data = json.loads(request.body)
        try:
            ph = PasswordHasher()
            user = User.objects.get(username=data['username'])
            user_pw = user.password

            if ph.verify(user_pw.encode(), data['password'].encode()):
                return JsonResponse({'success':True})

            else:
                return JsonResponse({'success':False}, status=401)

        except exceptions.VerifyMismatchError:
            return HttpResponse(status=401)

        except exceptions.VerificationError:
            return HttpResponse(status=401)            

        except KeyError:
            return HttpResponse(status=400)

공식문서: https://argon2-cffi.readthedocs.io/en/stable/api.html

profile
🔰

0개의 댓글