by 돼지뚱뙝이 [Oracle 기초] [2022.08.16 14:33:39]
암호화처리 해야하는 일이 생겨 sql펑션을 이용하여 암호화 처리를 하려고합니다.
기존에 만들어둔 암호화 펑션이 있어 사용해보니 한글을 암호화할경우 잘리는 현상이 발생하였습니다.
그래서 확인해보니 DBMS_OBFUSCATION_TOOLKIT.DES3ENCRYPT 를 이용한 암호화였고 https://oracle.tistory.com/362 사이트를 참고 하여 보니
암호화쳐리 할때 pieces_of_eight INTEGER := ((FLOOR(LENGTH(str)/8 + .9)) * 8);, input_string => RPAD(str, pieces_of_eight )를 이용하여 암호화할 데이터의 크기를 계산하는 부분이 들어가 있는대
영문처리할때는 문제가없었는대 한글처리할때 사이즈문제때문에 잘림현상이 발생하는거같습니다. 계산하는 부분을 pieces_of_eight INTEGER := ((FLOOR(LENGTH(str)/4 + .9)) * 8)처럼 바꿔 사용해도문제가 없을까요? 8 => 4
암호화하려는 데이터에 적용하여 사용하니 문제가 발생하지는 않았습니다. 물론 데이터양이적어 특이사항이 발생안할걸 수도 있는대.. 나중에라도 문제가 생길까하여 문의드립니다.
제가 글쓰는 제주가 부족하여 글이 좀 중구 난방입니다. 죄송하니다.
대상 문자의 길이를 정확이 계산하지 못하는 원인이
LENGTH(str)로 길이를 확인하기 때문입니다.
LENGTHB(str)로 변경해서 한글인 경우 Byte 단위로 계산할 수 있도록 하시면 될듯합니다.
그럼 UTF8로 셋팅된 경우 한글 한자는 3Byte로 길이가 3이 될 것입니다.