본문 바로가기
데이터베이스/Postgresql

[PostgreSQL] 암호화 함수 사용 (pgcrypto)

by cbwstar 2021. 7. 16.
728x90
반응형

1. 확장 모듈 설치

create extension pgcrypto;

enterprisedb 계정으로 해당 모듈을 설치할 스키마 선택 후 실행.

 

암호화 관련 함수 생성

 

 

2. Raw encryption functions

  convert_to/convert_from : 문자열 변환/복원

  encode/decode : 16진수 인코딩/디코딩

  encrypt/decrypt : 암호화/복호화

 

 

예제)

-> ENC_KEY는 실제 사용할 암호화KEY로 대체해야 함.

 

* 암호화 : utf8로 변환한 후, 암호화키로 'aes'알고리즘을 사용하여 암호화한 후, 그 값을 16진수(hex)로 encoding함

select encode(encrypt(convert_to('홍길동','utf8'),'ENC_KEY','aes'),'hex'); 

  --utf8, aes, hex는 고정값

 

* 복호화 : 암호화의 역순. 16진수값을 decoding한 후 암호화를 해제하고, 그 값을 다시 utf8에서 변환함

select convert_from(decrypt(decode('encrypted_value','hex'),'ENC_KEY','aes'),'utf8'); 

   --encrypted_value : 위에서 홍길동을 암호화한 16진수 값

 

* 테스트 테이블 생성후 샘플 데이터 입력

INSERT INTO tb_test(mem_id, mem_name, mobile_no) VALUES ('id001', '이름005', '01012341231');

 

* 평문으로 저장된 칼럼(mem_name)값을 암호화하여보기

select mem_id,
       encode(encrypt(convert_to(mem_name, 'utf8'), 'ENC_KEY', 'aes'), 'hex') as mem_name_encrypted, 
       mobile_no
  from tb_test;

 

* 평문값을 암호화하여 테이블에 저장하기(mem_name, mobile_no) 

INSERT INTO tb_test(mem_id, mem_name, mobile_no)
VALUES ('id001', encode(encrypt(convert_to('이름005','utf8'),'ENC_KEY','aes'),'hex'),
 encode(encrypt(convert_to('01012341231','utf8'),'ENC_KEY','aes'),'hex')); 

 

* 암호화된 칼럼(mem_name)값을 복호화하여 보기

select mem_id, convert_from(decrypt(decode(mem_name,'hex'),'ENC_KEY','aes'),'utf8') from tb_test;

 

 

728x90
반응형

댓글



"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

loading