2010-06-07 4 views
1

나는 암호화 된 데이터를 반환하는 mysql 쿼리를 실행 중입니다. 가능한 경우보기에 결과를 보내기 전에 결과를 디코드하고 싶습니다. 보기보다 컨트롤러 (또는 심지어 모델)에서 디코딩을 처리하는 것이 더 나은 형식처럼 보입니다.보기로 돌아 가기 전에 mysql 쿼리를 디코드하십시오.

어떻게해야 할 지 주위를 감쌀 수는 없습니다.

개체를 반복하고 디코드하고 뷰로 전송할 다른 배열로 밀어 넣을 수 있다고 생각했습니다. 문제는 쿼리의 인덱스를 알지 못하고 유지해야한다는 것입니다.

[id] => 742 
[client_id] => 000105 
[last] => dNXcw6mQPaGQ4rXfgIGJMq1pZ1dYAim0 
[first] => dDF7VoO37qdtYoYKfp1ena5mjBXXU0K3dDlcq1ssSvCgpOx75y0A== 
[middle] =>iXy6OWa48kCamViDZFv++K6okIkalC0am3OMPcBwK8sA== 
[phone] => eRY3zBhAw2H8tKE 

어떤 아이디어 :

그래서 쿼리는 같은 것을 반환 할 수 있습니다?


와 함께 종료 : 그것은 특정 인덱스 인 경우에

function name(){ 
    $data['e_key']=$this->e_key; 
    $clid = $this->uri->segment(3); 
    $name = $this->Clients_model->getNameData('*','client_id='.$clid,''); 
    $nameArray= array(); 
    foreach ($name->result() as $row){ 
     $x = $row; 
     $keys = array('id','client_id'); 
     $unenc = array(); 
     foreach ($x as $key=>$value){ 
      if(! in_array($key, $keys)){ 
       $unenc[$key]=$this->encrypt->decode($value,$this->e_key); 
      }else{ 
       $unenc[$key]=$value; 
      } 
     } 
     array_push($nameArray,$unenc); 
    } 
    $data['name'] = $nameArray; 
    $this->load->view('names/name_view',$data); 

} 
+0

인코딩으로 암호화를 혼동하지 않도록주의는 (I '는 암호화 된 데이터를 해독 할 필요'와 같은 문구를 발견하고 대답 나중에베이스 (64)의 이야기). 그것들은 똑같은 것이 아니며 데이터를 적절하게 보호하지 못하거나 고객의 요구 사항을 적절하게 보호하지 않으면 법을 위반하는 신용 ​​카드를 취급하는 경우 일 수 있습니다! – Kurucu

+0

@ Kurucu : 메모 주셔서 감사합니다. 코드 네이 터 (codeigniter) 내의 메소드 ('encrypt-> encode/encrypt-> decode')는 '디코드'라는 용어를 사용했다고 가정합니다. 나는이 게시물에서 암호화가 아니라 기술적으로 암호화라고 말합니다. – stormdrain

답변

1

데이터를 해독하는 것은 객체를 반복하는 문제이지만 암호화 된 필드는 해독해야합니다.

이 개체이고 암호 해독 기능이 decode()이면 다음 코드가 트릭을 수행해야합니다.

// The keys corresponding to the encrypted fields 
$encoded = array('last', 'first', 'middle', 'phone'); 

$decoded = array(); 
foreach($YOUR_OBJECT as $key => $value) 
{ 
    if (in_array($key, $encoded)) 
    { 
     $decoded[$key] = decode($value); 
    } 
} 
+0

그래서 열쇠를 알아야합니까? 키를 모른 채 객체를 반복 할 수있는 방법이 있다면 재사용이 가능할 것이라고 생각했습니다. 이것이 가능한가? 감사! – stormdrain

+2

얼마나 많은 데이터가 암호화됩니까? 암호화 된 키나 그렇지 않은 키를 지정해야합니다. 암호화되지 않은 필드가 몇 개 밖에없는 경우'$ unencoded = array ('id');와 if (! in_array ($ key, $ unencoded))를 사용하면 더 좋습니다. 데이터를 어떻게 암호화합니까? 암호화에 따라 필드를 지정하지 않고 해독 할 필드를 감지 할 수 있습니다. – Zackman

1

, 사용,

$result['last'] = base64_decode($result['last']); 

처럼 또는 모델을 디코딩 할 수 뮤 테이터와 접근 :

public function setUp() { 
     $this->setTableName('tablename'); 
     $this->actAs('Timestampable'); 
     $this->hasMutator('last', '_encode64'); 
     $this->hasAccessor('last', '_decode64'); 
    } 

protected function _encode($value) { 
    $this->_set('last',base64_encode($value)); 
} 
protected function _decode($value) { 
    return base64_decode($value); // not sure on this one - might have to 
    // return $this->set('last', base64_decode($value)); 
}