| 제목 | 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
위에서 변종원(웅파)님이 설명하셔서 덧붙이자면 서버의 암호화키는 세션을 암호화한다든지 사이트 전체적으로 사용하는 키입니다. 이 키는 절대 공개되어서는 안되는 키입니다.
|
서버에서는 저장되어있는 암호키로 해독.