반응형
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;
반응형
'[DB] POSTGRESQL' 카테고리의 다른 글
[PostgreSQL] 배열형 컬럼 다루기 (0) | 2021.01.27 |
---|---|
[PostgreSQL] 일반 테이블 -> 파티션 테이블로 변경하기 (1) | 2021.01.25 |
[PostgreSQL] trigger code source 확인하기 (0) | 2021.01.12 |
[PostgreSQL] 사용하지 않는 인덱스 조회 및 성능 개선 (0) | 2021.01.12 |
[PostgreSQL] 문자열 함수 (자르기, 붙히기, 치환 등) (0) | 2020.10.23 |