PostgreSQL을 사용하여 비밀번호를 안전하게 저장하는 방법
1. PostgreSQL에서 pgcrypto확장 기능에는 비밀번호 해싱에 필요한 내장 확장 기능이 있습니다.
확장 프로그램을 활성화하십시오:
CREATE EXTENSION pgcrypto;
2. 데이터 삽입
INSERT INTO user_account (user_name, password_hash)
VALUES ('user1', crypt('user1_password', gen_salt('md5'))) ;
설명)
get_salt(type) : type에 따라서 해시를 한다.
- des- 데이터 암호화 표준(DES) 알고리즘용
- xdes- 확장 DES 알고리즘의 경우
- md5- MD5 메시지 다이제스트 알고리즘용
- bf- Blowfish 알고리즘의 경우
crypt('비밀번호',해시함수) : '비밀번호'를 해시함수로 해싱해서 바꾼다.
비밀번호 확인하기
SELECT (password_hash = crypt('user1의 비밀번호 입력', password_hash))
AS password_match
FROM user_account
WHERE user_name = 'user1' ;
설명)
crypt('user1의 비밀번호 입력', password_hash)
- 비밀번호가 맞을 경우
- 비밀번호가 틀릴 경우
- 'user1의 비밀번호 입력'와 password_hash는 같은 해시값을 만든다.
- 1번과 4번 같은 문자열에 대한 같은 타입의 해시인데도 값이 다르다.
- 3번 이전에 2번을 했는데도 1번 해시값으로 검사했을 때 같다고 나온다.
- 1번과 2번에서 다른 타입의 해시 알고리즘을 사용하여 다른 값이 나온다.
nodedb=# SELECT crypt('supersecurepassword', gen_salt('bf')) ;
crypt
--------------------------------------------------------------
$2a$06$.OSDtWHWtAtNAnnIH/vz3.RfysAOn2DF.YU/fBFBqdXPPxvE/O2M.
(1개 행)
nodedb=# SELECT crypt('supersecurepassword', gen_salt('xdes')) ;
crypt
----------------------
_J9..V0Fk2jtgJXri9Cs
(1개 행)
nodedb=# SELECT crypt('supersecurepassword', '$2a$06$.OSDtWHWtAtNAnnIH/vz3.RfysAOn2DF.YU/fBFBqdXPPxvE/O2M.');
crypt
--------------------------------------------------------------
$2a$06$.OSDtWHWtAtNAnnIH/vz3.RfysAOn2DF.YU/fBFBqdXPPxvE/O2M.
(1개 행)
nodedb=# SELECT crypt('supersecurepassword', gen_salt('bf')) ;
crypt
-------------------------------------------------------------
$2a$06$n9ZD0NkhjKL0tEOXjsAtoOBcZIHs9yxlxdZEqa7slBluyCMDd27/q
비밀번호 수정하기
UPDATE user_account
SET password_hash = crypt('수정한 비밀번호 입력', gen_salt('md5'))
WHERE user_name = 'user1' ;
'개발 > PostgreSQL' 카테고리의 다른 글
PostgreSQL 기초2 (0) | 2023.08.02 |
---|---|
PostgreSQL 기초 1 (0) | 2023.07.28 |
[PostgreSQL] 1. 데이터베이스 회원가입과 로그인 테이블 만들기 (0) | 2023.07.27 |