CI ajax 암호화 관련 질문입니다.
질문 요지 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) 화면
움직이려면 클릭 후 드래그 하세요
이런식으로 구현해 보았습니다만,
어떻게 암호화가 되었든 암호화 키가 노출이 되어 있는데요
이런식으로 구현 하였는데 별다른 문제가 없을지 알고 싶습니다.
감사합니다.
글이 잘안올라가서 첨부합니다.
서버에서는 저장되어있는 암호키로 해독.