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

+ Recent posts