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

2022. 11. 16. 22:36·📂 Backend Engineering
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
반응형
저작자표시 비영리 변경금지 (새창열림)

'📂 Backend Engineering' 카테고리의 다른 글

[Spring] application-oauth.yml를 .gitIgnore에 등록하지않고 보안을 유지하고, 깃허브 액션을 사용해서 빌드 방법  (0) 2023.01.05
[JPA]즉시로딩과 지연로딩은 언제 사용할까? (feat. 프록시)  (0) 2022.12.27
콜라츠 추측 함수로 쪼개어 풀어보기  (0) 2022.10.01
[JAVA] Super() 키워드 예제 / Super 부모, 자식  (2) 2022.09.09
[JAVA] 헷갈렸던거 정리(static, 생성자, 기본생성자, 초기화)  (2) 2022.09.09
'📂 Backend Engineering' 카테고리의 다른 글
  • [Spring] application-oauth.yml를 .gitIgnore에 등록하지않고 보안을 유지하고, 깃허브 액션을 사용해서 빌드 방법
  • [JPA]즉시로딩과 지연로딩은 언제 사용할까? (feat. 프록시)
  • 콜라츠 추측 함수로 쪼개어 풀어보기
  • [JAVA] Super() 키워드 예제 / Super 부모, 자식
foodev
foodev
이것저것 개발과 이것저것 리뷰 합니다.
    반응형
    250x250
  • foodev
    개발 개맛집
    foodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (104) N
      • ⭐ Featured (4)
      • 📂 Backend Engineering (36)
      • 📂 Troubleshooting & Ops (10)
      • 📂 Infra & System (7) N
      • 📂 Reflections (21)
        • Year-in-Review (5)
        • Work & Career (10)
        • Lessons Learned (6)
      • 📂 Team Journal (10)
      • 📂 Archive (16)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    인프라 로그 저장 비용 감소하는 방법
    스냅샷과히스토리성 차이
    validation failed (numeric string is expected)
    db 초기화
    db 날린 썰
    해피해킹 방향키
    해피해킹 키매핑
    githubaction 라벨 ci/cd
    Azure log 비용 줄이기
    nestjs pipe
    스냅샷과 히스토리
    typedi 동작원리
    nestjs pipe body
    di동작원리
    해피해킹 꿀팁
    azure ci/cd
    typedi란
    di의존성
    JPA
    서이추
    githubaction 라벨 배포
    토이프로젝트개발일지
    해피해킹 카라비너
    QueryDSL
    db 날림
    해피해킹 커스텀
    창업패키지후기
    di란
    Azure 로그 최소 저장 30일
    개발썰
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
foodev
[SQL] AES 전화번호 복호화시 [blob] 문제 해결하기
상단으로

티스토리툴바