본문 바로가기

프로젝트 설정/기타

[암호화] bcrypt로 암호화 시작하기 (python)

반응형

password 암호화시 bcrypt 방식으로 하기로 하였다.

ko.wikipedia.org/wiki/Bcrypt

 

bcrypt - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. bcrypt 파일 암호화 유틸리티에 대해서는 블로피시 문서를 참조하십시오. bcypt는 블로피시 암호에 기반을 둔 암호 해시 함수로서 Niels Provos와 David Mazières가 설계

ko.wikipedia.org

velog.io/@kylexid/%EC%99%9C-bcrypt-%EC%95%94%ED%98%B8%ED%99%94-%EB%B0%A9%EC%8B%9D%EC%9D%B4-%EC%B6%94%EC%B2%9C%EB%90%98%EC%96%B4%EC%A7%88%EA%B9%8C

 

왜 Password hashing시 Bcrypt 가 추천되어질까?

정확히는 bcrypt가 정답은 아닙니다. 일반적으로 공격자는 GPU를 이용하여 빠른 연산속도로 암호화 공격 시도를 합니다. 어떤 암호화 함수(sha-2, bcrypt, pbkdf2, scrypt, ..)를 쓰던 강력하지만, 충분한 시

velog.io

 

사용 라이브러리 : bcrypt

#install
pip install bcrypt
pip3 install bcrypt

# 안되는 경우안되는 경우  pip version >= 20 안되는거 일수도 있으니 pip을 update 해주자.
python -m pip install -U pip

 

import bcrypt
import mysql.connector

# 암호화
data = {id:'test', password: '123'}
passwordSalt = bcrypt.gensalt()
passwordHash = bcrypt.hashpw(data['password'], passwordSalt)

# 에러남
TypeError: Unicode-objects must be encoded before hashing

# bcrypt를 불러오고 password라는 변수에 str 형식의 암호화 할 대상으로 하면 에러가 난다고 한다.
# 암호화 함수는 오직 bytes string에서만 작동한다고한다.
# 해싱하기 전에 password를 bytes string으로 변환 필요

# utf8 인코딩은 str 형태일 진행
password = password.encode('utf-8')

# 암호화
passwordHash = bcrypt.hashpw(password, passwordSalt)

# 실제 저장되는 값
#decode 후 저장하지 않으면 나중에 checkpw 할때  ValueError: Invalid salt 에러가 나온다.
insertPasswordHash = passwordHash.decode()

# 확인
inputPassword = '123'

dbconn = mysql.connector.connect(**config)
cursor = dbconn.cursor(dictionary=True)
sql = 'select * from users where id = "test"';
cursor.execute(sql)
result = cursor.fetchone()

bcrypt.checkpw(inputPassword.encode('utf-8'), result['pw'].encode('utf-8'))
# 결과
true
false

 

참조

더보기

pypi.org/project/bcrypt/

 

bcrypt

Modern password hashing for your software and your servers

pypi.org

velog.io/@ybear90/Django-Account-%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%9A%8C%EC%9B%90-%EA%B0%80%EC%9E%85-%EB%B6%80%EB%B6%84-%EC%95%94%ED%98%B8%ED%99%94-%EC%9D%B8%EC%A6%9D%EC%9D%B8%EA%B0%80-%EA%B8%B0%EB%8A%A5-%EC%B6%94%EA%B0%80-2

 

[Django] Account 로그인/회원 가입 부분 암호화, 인증/인가 기능 추가 - 2

이전 포스트에서 암호화, 인증 인가 관련 내용을 토대로 실제 django 기반 api에 적용을 해 보았다.회원 가입 기능 부분에서 password 데이터를 bcrypt를 통해 암호화를 하였다. 암호화 알고리즘은 항상

velog.io

 

velog.io/@anrun/%EC%95%94%ED%98%B8%ED%99%94-bcrypt%EB%A1%9C-%EC%95%94%ED%98%B8%ED%99%94-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0

 

[암호화] bcrypt로 암호화 시작하기

bcrypt는 암호를 해시해주는 파이썬 라이브러리다 가상환경을 구축한 뒤 bcrypt를 설치해 간단한 실습을 했다. 암호화 파이썬 패키지 관리 시스템인 pip를 이용해 bcrypt와 pyjwt를 설치한다 pyjwt는 jwt(j

velog.io

toughrogrammer.tistory.com/216

 

[Python, Flask] 암호를 안전하게 저장하기

웹 개발을 하다보면 비밀번호를 안전하게 저장해야한다. 일반적으로 해싱을 통해 이것을 해결하는데 단순 해싱의 문제점이 있다. 바로 동일한 문자열을 해싱했을 때 동일한 결과값이 나온다는

toughrogrammer.tistory.com

justkode.kr/python/flask-restapi-3

 

Flask로 REST API 구현하기 - 3. JWT로 사용자 인증하기

REST API를 사용 하게 된다면, 사용자 인증 방법으로 제일 많이 사용하는 것이 JWT (JSON Web Token) 입니다. JWT에 대해 더 알고 싶다면. Velopert 님의 게시글을 참고 해 주세요! 우선 설치해야 할 것 일단 b

justkode.kr

 

 

 

반응형