2014-02-19 3 views
-1

나는 응용 프로그램에서 일하고 있는데 여기 붙어 있네.이러한 여분의 문자 제거

나는 데이터베이스를 검색하고 특정 레코드를 선택할 수 있도록 ID가 URL에 전달되는 제품 삭제 페이지를 만들고 있습니다. ID를 알몸으로 전달하는 것은 좋은 생각이 아니므로, 따라서 해시로 ID를 암호화 한 다음 전달합니다. 하지만 해시에는 중간에 공간이 있으므로 응용 프로그램에서 사용할 때 스페이스를 채우기 위해 스페이스 문자가 해시에 추가됩니다.

가 여기 내 암호화 기능입니다 : - 여기

function getHash($recordid) 
{ 
    global $db; 
    $key_value="[email protected]@"; 
    $plain_text=$recordid; 
    $encrypted_text = mcrypt_ecb(MCRYPT_DES, $key_value, $plain_text, MCRYPT_ENCRYPT); 
    return $encrypted_text; 
} 

내가 URL을 전달하고 간단하게 인쇄되지 않을 때 나는 = 1 $에 대한 출력을 얻을 plain_text거야. 내가 URL을 통해 전달할 경우

ÑÛo‡Ó‰-7 

하지만은, 그것은이 변환됩니다 : -

%D1%DBo%87%D3%89-7 

내가 암호를 해독 할 때 따라서 반드시 내가 올바른 결과를 얻을 수 없다. 해독 한 후 원래 값을 얻을 수있는 방법이 있습니까 (이 예에서는 1), 아니면 다른 암호 해독 기능을 사용하여이 문제를 없앨 수 있습니까?

감사합니다.

+0

죄송합니다.이 작업을 승인해야합니까? 모호함으로 인한 보안은 거의 좋은 접근 방법이 아닙니다. – raina77ow

+0

이렇게하려면 인증이 필요합니다. 사용자가 로그인해야하며 특정 ID를 가진 제품이 사용자 계정에 매핑되어 있는지 여부를 확인하는 기능이 있습니다. 그러나 id를 해독하여 다른 보안 계층을 추가하려고합니다. – Ankur

+0

urlencode ($ encrypted_text)를 사용하면 converto가 실제 값을 깨지 않고 전달 가능 인코딩을 수행 한 다음 urldecode ($ encrypted_text)를 사용하여 페이지에서 해시를 다시 가져올 수 있습니다. [http://meyerweb.com/eric/tools/dencoder /) –

답변

0

이들은 모두 8 비트 문자이므로 인코딩 될 때 % XX 16 진수 표현으로 변환됩니다. 웹 서버는 URL의 쿼리 부분에있을 때 역방향으로 처리하므로 괜찮을 것입니다. 여전히 URL을 만들기 전에 crypted 문자열을 base64로 인코딩하는 것이 안전합니다. 다시 가져올 때 base64 디코드하면 ASCII 문자 만 처리해야합니다.

+0

예를 들려 줄 수 있습니까? 아니면 어떤 링크? – Ankur

+0

http://php.net/manual/en/function.base64-encode.php 및 http://php.net/manual/en/function.base64-decode.php를 참조하십시오. base64_encode의 결과는 항상 "보기 좋은"ASCII 문자열입니다. –