pgsql에서 암호화 / 복호화 사용법.


[암호화방식]
blowfish = bf
rijndael   = aes
des        = des
cast5      = cast5
3des       = 3des



// 일반적 방법
SELECT encode(encrypt('암호화할 문자열', '암호키1', '암호화방식'), 'hex');
SELECT decrypt(decode('복호화할 문자열', 'hex'), '암호키1', '암호화방식');


// 예제 : 3des 방식으로 암호화 / 복호화
SELECT encode(encrypt('foo', '0123456789', '3des'), 'hex');
-- 암호화 결과값 : d2fb8baa1717cb02
SELECT decrypt(decode('d2fb8baa1717cb02', 'hex'), '0123456789', '3des');





// iv(Initialization Vector) 사용
SELECT encode(encrypt_iv('암호화할 문자열', '암호키1', 'IV', '암호화방식'), 'hex');
SELECT decrypt_iv(decode('복호화할 문자열', 'hex'), '암호키1', 'IV', '암호화방식');
 

// 예제 : blowfish 방식으로 암호화 / 복호화
SELECT encode(encrypt_iv('foo', '0123456789', 'abcd', 'bf'), 'hex');
-- result : ab751ca4c1bc250e
SELECT decrypt_iv(decode('ab751ca4c1bc250e', 'hex'), '0123456789', 'abcd', 'bf');







암호화 과정이 bytea 로의 변환과정 등이 있어 한글이 들어갈 경우 복호화 할 때 인코딩 변경이 필요함.

// 암호화
SELECT encode(encrypt('한글', '0123456789', '3des'), 'hex');

// 복호화
-- DB 인코딩이 UTF-8 일 경우
SELECT convert_from(decrypt(decode('e96924ddc50cb671', 'hex'), '0123456789', '3des'), 'utf8');

-- DB 인코딩이 SQL-ASCII 혹은 EUC-KR 일 경우
SELECT convert_from(decrypt(decode('e96924ddc50cb671', 'hex'), '0123456789', '3des'), 'euc-kr');




















Posted by bloodguy
,