CI 묻고 답하기

제목 코드이그나이터3 encryption 데이터 검색관련
카테고리 CI 2, 3
글쓴이 박핑 작성시각 2020/01/20 10:33:46
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 15135   RSS

안녕하세요. 현재 코드이그나이터3을 이용하여 사이트를 개발하고 있는 개발자 입니다.

편리한 사용법에 보안도 좋아서 만족하고 있는데 복호화 가능한 암호화를 위해서 encryption 라이브러리를 사용하자 테스트를 하였습니다.

암호화도 복호화도 잘되었는데 문제는 조회를 하면 조회가 되지 않아서 확인하였더니 매번 암호화되어 저장되는 값이 다르더라구요.

 

이런 경우가 다른 개발자 분들도 계실텐데 어떻게 해결하셨는지, 혹시 제가 놓친 부분이 있는지 도움을 받을수 있을까하여 글을 올립니다.

 

태그 #암호화조회
 다음글 컨트롤러에서 ajax post 요청 받는법 (5)
 이전글 $result=$this->db->query... (3)

댓글

한대승(불의회상) / 2020/01/20 10:58:42 / 추천 0

암호화되어 저장되는 값이 달라보이는것은 salt가 추가되었기 때문입니다.

검색이 필요하다면 암호화된 데이터를 기준으로 DB에서 검색하지 마시고 별도의 필드를 만들어 원본 데이타를 md5() 같은 해쉬함수로 변환하여 저장후 사용하시면 됩니다.

물론 이렇게 하면 like 검색은 안되겠죠 ^^

엽토군 / 2020/01/20 12:32:03 / 추천 0

실제로 db에 저장할 때는 평문으로 저장하고, (대신 db 보안을 강화함) 사용자에게 제공하는 시점에서 수시로 암호화하여 제공하는 방향도 있습니다.

굳이 난독화하는 자료를 또 굳이 수시로 "조회"해야 한다면 저라면 그렇게 하겠습니다.

박핑 / 2020/01/20 14:28:46 / 추천 0

답변에 감사드립니다.

제가 하고 있는 프로젝트 규칙상 사용자정보를 암호화 해야 하고, 전화가 오거나 문의가 오면 해당하는 사용자의 전화번호 또는 성명으로 조회를 해야 하는 특성이 있어서 별도의 필드에 데이터를 저장하거나 하면 않되는 것이라서...

혹시 코드이그나이터 옵션에 SALT값을 제거하거나 하는 옵션이 있나요?

변종원(웅파) / 2020/01/20 14:35:08 / 추천 0

암호화, 복호화가 잘 됐다면 "조회"도 동일하가 잘 되어야 합니다. 복호화가 잘되었다라면 당연히 잘 보였다라는 의미라서요.

검색 상관 없다면 mysql 암복호화 함수를 이용하는 것도 좋은 방법 중 하나입니다. https://m.blog.naver.com/racoon_z/220687743737

박핑 / 2020/01/20 15:12:39 / 추천 0

`변종원(웅파)`님. 이론상 암호와와복호화가 잘되면 조회할 때 값을 암호화 해서 암호화 값을 비교하면 조회가 잘되겠지요.

하지만 코드이그나이터 3에서는 아래와 같은 함수를 만들어서 동일한 값을 넣어도 다른값을 리턴합니다.

 

public function _EncodeSet($param) {
//암호화 라이브러리
$this->load->library('encryption');
$strReturn = "";
if($param!="" && isset($param)){
$strReturn = $this->encryption->encrypt($param);
}
return $strReturn;
}
 
그래서 사용자가 조회하고자 하는 값을 암호화하고 DB에 저장된 값과 비교해도 조회를 못하는 것이지요.
 
해당 부분은 다른 방법으로 해결하거나 해당 라이브러리를 수정하는 방법을 찾아보아야 할 듯 합니다.
 
답변에 감사드립니다~
변종원(웅파) / 2020/01/20 15:49:23 / 추천 0

박핑/ 이건 ci3의 현상이 아니라 php암호화 함수의 리턴내용이 원래 그렇습니다. ci의 독자적인 암호화 기술을 사용하는게 아니라 php함수를 좀더 편하게 사용하도록 랩핑한걸로 보시면 됩니다. 

암호화 된 값을 db에 저장했다가 다시 꺼내서 복호화 하는데 안된다는 말씀인가요? 뭐가 문제인지 모르겠네요.

암호화 요청할때마다 값이 바뀌어 나오는 것은 정상입니다.

해당 값을 키로 쓰려고 하니 문제가 발생하는 것같네요. ^^;;

아래 코드 실행해보시면 실행할때 마다 $b 값이 바뀌지만 복호화값은 변동이 없습니다.

$this->load->library('encryption');
$a = 'aa11dd';
echo $a .'<br>';
$b = $this->encryption->encrypt($a);
echo $b .'<br>';
$c = $this->encryption->decrypt($b);
echo $c .'<br>';
한대승(불의회상) / 2020/01/20 16:05:47 / 추천 0
@박핑 별도의 검색용 해시 테이블을 만드는 방법도 있습니다.
박핑 / 2020/01/20 16:14:13 / 추천 0

`변종원(웅파)` 사용자 정보 저장테이블에서 사용자명으로 검색을 해야 하니 해당값을 키로 사용해서 발생하는 문제가 맞습니다.

검색용 해시테이블에 대해서 알아봐야 할 듯 합니다.

감사합니다.