제목 | CI ajax 암호화 관련 질문입니다. | ||
---|---|---|---|
글쓴이 | 나이유미 | 작성시각 | 2014/08/13 01:06:43 |
|
|||
질문 요지 CI의 config 아이템 중 encryption_key를 암호화 하여 숨기면서 클라이언트에서 서버로 전송하는 값을 암호화 하여 전송하는 알고리즘(?프로세스!?) 을 알고 싶습니다. 제가 구현한 방식은 아래와 같습니다. 1) javascript - 암호화 키 세팅 전역 변수에 CI가 제공 하는 암호화 키를 넣어줍니다. encryption_key가 암호화 되어 출력 되어 소스보기로 볼시 암호화 되어 나옵니다. var encKey = '{C}encrypt->encode( $this->config->item("encryption_key", FALSE, TRUE))?>'; var encKey = 'o3biI+A1BKc+4gwLvDDSXfWp+HA7uspTyrsq8qDM6RjsCz0TE2EDZk95wRjzjoNndtAwuZwArixBnMM4EhBMdA=='; 2) javascript - 포스트 발송 GibberishAes 라이브러리 사용하여 전송 하려는 값을 암호화 ajax post시 encKey를 동시에 발송 해줍니다. 즉 전송하려는 값 foo와 encKey를 동시에 발송 해줍니다. csrf_test_name은 애교-_-; var bar = GibberishAES.enc(oForm.find('input[name=uq_member_id]').val(), encKey); var posting = $.post( url, { csrf_test_name: csrf_test_name, encKey : encKey, foo : bar } ); 3) php(CI) - 포스트 받음 ajax 받은 encKey를 decode하여 gibberishaes에 키로 넣어줍니다. public function testProcess(){ $req = $this->input->post(); $encKey = $req['encKey']; $dEncKey = $this->encrypt->decode($encKey); $foo = $this->input->post('foo'); $dFoo = $this->gibberishaes->dec($foo, $encKey); echo sprintf('<|>encKey>>%s<<', $encKey); echo sprintf('<|>dEncKey>>%s<<', $dEncKey); echo sprintf('<|>foo>>%s<<', $foo); echo sprintf('<|>dFoo>>%s<<', $dFoo); } 4) 출력 결과 4-1)포스트로 받은 encKey값 <|>encKey>>IoAZi2jDKAy+IhEmNosef6DOcD2Pwq79iEtNMbjecgpwMdQFx6d0vL+UWGRC8mh1ap2XxBXRZilG5QBcDnnkMg==<< 4-2) php에서 CI가 제공하는 함수로 디코딩 된 값.질문 요지 CI의 config 아이템 중 encryption_key를 암호화 하여 숨기면서 클라이언트에서 서버로 전송하는 값을 암호화 하여 전송하는 알고리즘(?프로세스!?) 을 알고 싶습니다. 제가 구현한 방식은 아래와 같습니다. 1) javascript - 암호화 키 세팅 전역 변수에 CI가 제공 하는 암호화 키를 넣어줍니다. encryption_key가 암호화 되어 출력 되어 소스보기로 볼시 암호화 되어 나옵니다. var encKey = '{C}encrypt->encode( $this->config->item("encryption_key", FALSE, TRUE))?>'; var encKey = 'o3biI+A1BKc+4gwLvDDSXfWp+HA7uspTyrsq8qDM6RjsCz0TE2EDZk95wRjzjoNndtAwuZwArixBnMM4EhBMdA=='; 2) javascript - 포스트 발송 GibberishAes 라이브러리 사용하여 전송 하려는 값을 암호화 ajax post시 encKey를 동시에 발송 해줍니다. 즉 전송하려는 값 foo와 encKey를 동시에 발송 해줍니다. csrf_test_name은 애교-_-; var bar = GibberishAES.enc(oForm.find('input[name=uq_member_id]').val(), encKey); var posting = $.post( url, { csrf_test_name: csrf_test_name, encKey : encKey, foo : bar } ); 3) php(CI) - 포스트 받음 ajax 받은 encKey를 decode하여 gibberishaes에 키로 넣어줍니다. public function testProcess(){ $req = $this->input->post(); $encKey = $req['encKey']; $dEncKey = $this->encrypt->decode($encKey); $foo = $this->input->post('foo'); $dFoo = $this->gibberishaes->dec($foo, $encKey); echo sprintf('<|>encKey>>%s<<', $encKey); echo sprintf('<|>dEncKey>>%s<<', $dEncKey); echo sprintf('<|>foo>>%s<<', $foo); echo sprintf('<|>dFoo>>%s<<', $dFoo); } 4) 출력 결과 4-1)포스트로 받은 encKey값 <|>encKey>>IoAZi2jDKAy+IhEmNosef6DOcD2Pwq79iEtNMbjecgpwMdQFx6d0vL+UWGRC8mh1ap2XxBXRZilG5QBcDnnkMg==<< 4-2) php에서 CI가 제공하는 함수로 디코딩 된 값. <|>dEncKey>>naiyumie_sexy_encryption_key<< CI의 encryption_key와 일치 합니다. 4-3) 전송받은 암호화 된 foo 값 <|>foo>>U2FsdGVkX1+tbTLtzuorDn+CRuaP6Gfcj2Hulbilr0hKkXczHrSZqwTbpTyAfyRJ<< 4-4) 암호화가 해재된 foo의 값 <|>dFoo>>xxxxxxxxgggggggbggggg<< 5) 화면 움직이려면 클릭 후 드래그 하세요 이런식으로 구현해 보았습니다만, 어떻게 암호화가 되었든 암호화 키가 노출이 되어 있는데요 이런식으로 구현 하였는데 별다른 문제가 없을지 알고 싶습니다. 감사합니다. <|>dEncKey>>naiyumie_sexy_encryption_key<< CI의 encryption_key와 일치 합니다. 4-3) 전송받은 암호화 된 foo 값 <|>foo>>U2FsdGVkX1+tbTLtzuorDn+CRuaP6Gfcj2Hulbilr0hKkXczHrSZqwTbpTyAfyRJ<< 4-4) 암호화가 해재된 foo의 값 <|>dFoo>>xxxxxxxxgggggggbggggg<< 5) 화면 움직이려면 클릭 후 드래그 하세요 이런식으로 구현해 보았습니다만, 어떻게 암호화가 되었든 암호화 키가 노출이 되어 있는데요 이런식으로 구현 하였는데 별다른 문제가 없을지 알고 싶습니다. 감사합니다. 글이 잘안올라가서 첨부합니다. |
|||
첨부파일 |
질문_요지_CI의_config_아이템_중_encryption.docx (20.2 KB) |
||
다음글 | 패이지 네이션에 대해서 (1) | ||
이전글 | 소스코드 중첩 배열 줄 어떻게 맞추시나요? (1) | ||
변종원(웅파)
/
2014/08/13 07:27:29 /
추천
0
|
letsgolee
/
2014/08/13 08:09:30 /
추천
0
위에서 변종원(웅파)님이 설명하셔서 덧붙이자면 서버의 암호화키는 세션을 암호화한다든지 사이트 전체적으로 사용하는 키입니다. 이 키는 절대 공개되어서는 안되는 키입니다.
|
서버에서는 저장되어있는 암호키로 해독.