2011-03-18 3 views
1

데이터베이스에 id_num이라는 열이 있고 열의 고유 한 true 값이 있어야합니다.양방향 암호화를 데이터베이스의 데이터와 비교

사용자는 시스템에 등록 할 때 ID 번호를 입력해야합니다. ID 번호를 보호하기 위해 $ this-> encript-> encode()를 사용하여 인코딩합니다.

동일한 데이터를 입력 할 때마다 암호화 된 데이터가 다른 코드를 생성합니다.

예 :
먼저 등록 :

둘째 등록

내가 12345을 입력, PVfuF8GDzE4yton9tNabJwG에 encripted 될 것이다 : 나는 같은 번호 12345를 입력 , 그래서 다른 코드 M0wYZsDAdR1u0WlsDAdR1

에 encripted됩니다, I ID 번호가 이미 존재하는지 확인하기 위해 checkExistIdNum()을 호출하여 id_num 열이 고유한지 확인하십시오. encripted 코드가 모두 다른 동안

function checkExistIdNum($enc_id_num=null) { 
    $this->db->select('COUNT(*) AS count'); 
    $this->db->where("(id_num = '$enc_id_num' AND user_id != '".user_id()."')"); 
    $query = $this->db->get('user_info'); 
    $num = $query->row()->count; 

    if($num>0) return true; 
    else return false; 
} 

모두 같은 진정한 가치를 가지고 있지만, 어떻게 ID_NUM = '$의 enc_id_num'를 비교할 수 있는가?

답변

0

나는 암호 해시과 양방향 암호화의 개념을 혼동하고 있다고 생각합니다.

해시는 편도이며 이며 항상이고 결과는 동일입니다.

MD5 또는 SHA1은 데이터베이스에서 암호를 마스크하는 데 일반적으로 사용되는 단방향 해시 알고리즘입니다. 해시를 얻은 경우 단방향으로 처리되므로 해시가 원래 위치로 되돌릴 수 없습니다. 원래 값.

0

데이터베이스의 내장 암호화 기능을 사용하여 데이터베이스에서 값을 인덱싱하고 입력 한 임의의 값과 빠르게 일치시킬 수 있습니다. 그렇지 않으면 당신은 바퀴 만 재발 명하고 매번 (매우 느리게) 비교할 수있는 별도의 색인을 보관하거나 모든 행을 개별적으로 (매우 느리게) 해독하고 비교해야합니다.

내장 된 암호화는 색인을 통해 민감한 데이터가 누출되지 않고도이 모든 것을 해결합니다.

그리고 아마도 해시를 사용하는 것이 좋겠지 만 간단한 계정 문자열의 경우 누군가가 데이터베이스를 덤프하면 쉽게 리버스 엔지니어링 될 수 있습니다.

데이터베이스 또는 PHP 버전을 식별하지 못하므로 더 구체적으로 설명 할 수 없습니다.

관련 문제