데이터베이스 상호작용과 비밀번호 해싱
pip install psycopg2-binary
pip install passlib
PostgreSQL 데이터베이스와 상호 작용하기 위한 psycopg2-binary 패키지
비밀번호 해싱을 위한 passlib 패키지
psycopg2-binary 사용법
import psycopg2
# 데이터베이스에 연결
connect = psycopg2.connect(
dbname="your_db",
user="your_user",
password="your_password",
host="your_host",
port="your_port"
)
# 커서를 생성
cursor = connect.cursor()
이후 커서로서 역할 수행
passlib 사용법
from passlib.hash import pbkdf2_sha256
# 비밀번호 해싱
hashed_password = pbkdf2_sha256.hash("your_password")
# 비밀번호 검증
is_correct = pbkdf2_sha256.verify("your_password", hashed_password)
해싱과 암호화는 비슷하지만
약간의 차이가 있다
해싱(Hashing)
- 단방향성: 해싱 함수는 입력 값을 고정된 길이의 문자열(해시)로 변환합니다. 이 과정은 단방향으로, 해시된 값을 원래의 값으로 되돌릴 수 없습니다.
- 고정된 길이: 해싱 함수의 출력은 항상 고정된 길이입니다. 예를 들어, 입력 값이 아무리 길어도 SHA-256 해싱 함수는 256비트의 해시 값을 생성합니다.
- 주로 비밀번호 저장에 사용: 해싱은 비밀번호를 저장할 때 사용됩니다. 데이터베이스에 해시된 비밀번호를 저장하면, 원본 비밀번호는 저장되지 않으므로 해킹 당하더라도 원본 비밀번호를 알 수 없습니다.
암호화(Encryption)
- 양방향성: 암호화는 데이터를 읽을 수 없는 형식으로 변환하지만, 올바른 키를 사용하면 원래 데이터를 복원할 수 있습니다.
- 가변 길이: 암호화된 출력의 길이는 원본 데이터와 암호화 알고리즘에 따라 달라질 수 있습니다.
- 주로 데이터 전송에 사용: 암호화는 데이터를 안전하게 전송하거나 저장할 때 사용됩니다. 데이터를 복원하려면 암호화에 사용된 키가 필요합니다.
즉, 비밀번호를 지키는데에는
암호화보다는 해싱이 더 이롭다
물론 비밀번호를 잊어버렸을 시에는
되찾을 수 없으니
재설정 코드가 필요하다
함수 사용시
def hash_password(original_password) :
password = pbkdf2_sha256.hash(original_password)
return password
라고 사용 할 수 있지만
random seed를 찾기가 가능해져
아래와 같이 추가 문구를 넣어 좀 더 복잡하게 한다
def hash_password(original_password) :
original_password + 'atauoi31nto$#^*@as1325267SFA'
password = pbkdf2_sha256.hash(original_password)
return password
이는 또 다른 유출을 막기위해 지난번과 같이 config.py에 따로 작성하여
SALT 라고 변수처리 하자
비밀번호 체크하는 함수 또한 아래와 같다
비밀번호 체크 함수
def check_password(original_password, hashed_password) :
original_password + Config.SALT
pbkdf2_sha256.verify(orginal_password, hashed_password)
로그인을 할때의
유저는 해싱되기전의 비밀번호를 입력할 것이고
DB에서는 해싱후의 비밀번호만을 알고 있으니
이게 서로 맞는지 체크과정이 필요하다
이메일 형식이 맞는지 확인
pip install email-validator
from email_validator import validate_email, EmailNotValidError
email = "test@example.com"
try:
v = validate_email(email)
except EmailNotValidError as e:
print(str(e)) # 틀렸을경우 어떻게 틀렸는지 출력
라고 입력하여
이메일 형식이 알맞은지 검사하고
유효하지 않은 경우 예외를 발생시킨다
이메일 형식이 알맞다면 통과시키는 라이브러리이다
'API > API 관련 설정 및 라이브러리' 카테고리의 다른 글
JWT 토큰 설정후 API 수정 (0) | 2024.05.22 |
---|---|
회원가입, 로그인시 필요한 인증 토큰 라이브러리 (0) | 2024.05.22 |
Mysql Connector 설치 및 사용법 (0) | 2024.05.21 |
API - 포스트맨 body에서 json을 받아 처리하는 법 (0) | 2024.05.20 |
API - Flask 설치, postman 설치 (0) | 2024.05.20 |