💻 개발/언어

[SQL] AES 전화번호 복호화시 [blob] 문제 해결하기

foodev 2022. 11. 16. 22:36
728x90
반응형

먼저 비밀번호 복호화하는데 자바 진영이 아닌 SQL에서(mapper.xml) 처리를 했다. 

SQL에서 처리 했을 때의 장점은 자바에서 for문을 돌지 않아도 된다는 장점이 있다고 한다.

툴은 DBeaver를 사용했고 전화번호 복호화 작업을 하던 중

칼럼에 [blob]이 찍히는 것을 확인했고 위와 같은 문제를 알게 되어 공부하던 중 내용을 정리해보았다.

 

 

1. DTO에 저장하나? Map에 저장하나?


나같은 경우는 Mapper.xml에 선언한 쿼리의 리턴 값을  Map<String, Object> param 형식으로 저장했다.

key 값을 DTO에서 String 변수에 저장하면  SQL에서 나온 값에 대해 JAVA에서 형 변환을 해주어 문제가 되지 않았지만,

Map에 저장하다보니 형 변환에 문제가 발생하여 [Blob]이 발생했다. 

 

 

2. 해결방법


1. SQL에서 값을 가져올 때 SQL문에서 형 변환 처리를 해주거나

2. DTO로 값을 저장하거나 

 

 

CAST(REGEXP_REPLACE(AES_DECRYPT(UNHEX(m.mbl_no), #{aes_encrypt_key}), '[^0-9]', '') as varchar(100) character set utf8)  as mbl_no   /* varchar-varchar(300)-휴대폰_번호 */

 

3. 해석


CAST(REGEXP_REPLACE(AES_DECRYPT(UNHEX(m.mbl_no), #{aes_encrypt_key}), '[^0-9]', '') as varchar(100) character set utf8)  as mbl_no   /* varchar-varchar(300)-휴대폰_번호 */

 

 

1. CAST함수는 데이터 형식을 다른 데이터 형식으로 변환을 해준다.

2. REGEXP_REPLACE를 사용하여 전화번호 정규식으로 치환한다.

3. AES_DECRYPT 는 암호화된 문자열을 복호화한다.

4. UNHEX 16진수를 2진수화로 변환한다??

https://learn.microsoft.com/ko-kr/azure/databricks/sql/language-manual/functions/unhex

5.m.mbl_no는 필자가 사용한 칼럼 해당 코드를 사용하려면 실제 사용하는 칼럼으로 변환해야 한다.

6. #{aes_encrypt_key} 변수를 서비스 단에서 선언하여 전달받는다.

7. alias를 사용하는데 크기, character set을 선언한다.

8. 최종적으로 alias를 선언하여 칼럼 값을 저장한다.

 

 

혹시 더 좋은 방법이 있다면 댓글로 피드백 부탁드리겠습니다! 감사합니다.

 

728x90
반응형