Django가 bcrypt를 사용하여 암호 생성
다른 시스템의 사용자를 관리하기 위해 시스템을 설계(Django)해야 합니다.사용자는 다른 시스템에 로그인하여 진행하고 그곳의 암호는 bcrypt로 검사하기 때문에 Django시스템에서 암호 저장도 bcrypt로 암호화하여 저장해야 한다.
한편, Django는 자체적인 User에서 Password 기능(명문 입력, 암호화 문자열 자동 생성)을 제공했지만 모델에서는 소위 PasswordField를 제공하지 않았다.
따라서, 수요는 어떻게 자신이 실현한 등록 기능에서 명문 암호를 bcrypt로 암호화하여 저장하는가 하는 것이다
설계
이전에는 안전에 대한'전문'지식이 누적되지 않았기 때문에 루트, 보기, 폼 등 구성 요소를 만들기로 결정했지만 자료를 찾는 과정에서 많은 유용한 자료를 발견했다.
그러나 앞당겨 최적화하는 것은 만악의 근원이다. 나는 기술 방안을 중도에 바꾸기로 결정하지 않고 다음 판을 기다렸다가 더욱 전문적인 방안으로 바꾸었다.
창설 루트, 보기, 폼, 템플릿 등 과정은 모두 비교적 간단하기 때문에 군더더기 없이 명문 암호를 어떻게 암호화하는 과정에 중심을 두었다.
bcrypt 다운로드
파이썬 버전의 bcrypt 사이트, 설치 명령:
pip install bcrypt
이루어지다다음form의
clean_password()
함수에서 암호화된 문자열을 되돌려줍니다.import bcrypt
class SignUpForm(forms.Form):
password1 = forms.CharField(
required=True,
widget=forms.PasswordInput(attrs={'placeholder': ' ', 'class': 'input pass'})
)
password2 = forms.CharField(
required=True,
widget=forms.PasswordInput(attrs={'placeholder': ' ', 'class': 'input pass'})
)
def clean_password2(self):
cleaned_data = super(SignUpForm, self).clean()
password2 = cleaned_data.get('password2')
return bcrypt.hashpw(password2, bcrypt.gensalt())
views에서 값을 받을 때
form.cleaned_data['password2']
로 암호화된 문자열을 찾을 수 있습니다. 검증 기능은 수요 부분에서 소개를 했고django가 책임을 지지 않아도 됩니다.배갱
내 django는python3을 기반으로 하는데python2에서 암호화 문자열을 생성하는 과정에 문제가 없지만 python3에서는 다음과 같은 오류를 보고합니다.
Unicode-objects must be encoded before hashing
다음 원인을 찾았습니다.python3에서 문자열
str
과 bytes
두 가지 형태가 있기 때문에 변경이 필요합니다.bcrypt.hashpw(password2.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
또한 bcrypt는 여러 가지 기준이 있는데 우리가 필요로 하는 것은
2a
이기 때문에 다음과 같이 바꾸어야 한다.bcrypt.hashpw(password2.encode('utf-8'), bcrypt.gensalt(prefix=b'2a')).decode('utf-8')
이렇게 하면 정확한 결과를 얻을 수 있다.
결실
패스워드의 값이 bcrypt 암호화된 문자열임을 볼 수 있습니다.
관련 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【비망록】BCrypt를 사용한 Rails+MongoDB에서의 패스워드 암호화비밀번호를 암호화 할 때 BCrypt가 좋기 때문에 Rails+MongoDB의 도입 방법부터 사용 방법까지 Rails + MongoDB의 암호 필드 (RDB의 속성, 열) 원시 저장하지 않으려는 데이터를 암호화하고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.