2011-02-24 3 views
1

페이지의 URL 일부로 전달할 토큰을 만들고 있습니다. rawurlencode()을 사용하여 문자열을 인코딩하여 토큰으로 보내지 만 수신 된 토큰 (URL 매개 변수로 전달됨)을 디코딩하면 약간 다른 문자열이 나타납니다. 여기 /path/to/file.html?token=abcd123PHP : URL 인코딩 문제 (rawurlencode 및 rawurldecode)

을 내가 사용하고있는 코드 조각입니다 :

내 URL은 다음과 같습니다. 나는 분명히 진절머리 나는 무엇인가하고 있는가? 그로 인해 실패한 경우, (암호화 된) 토큰을 만들어 URL에 전달하는 더 좋은 방법이 있습니까? 그들은 문제의 원인 아니었다 - -

<?php 
//send 

$raw = "some secret string"; 
$token = rawurlencode($raw); 


//recieve 
$data = rawurldecode($token); 

?> 

[편집]

나는 (DEC) ryption의 기능성 ENC을 제거하고 붉은 청어했다. 문제를 작업 범위에서 대칭 적이 지 않은 rawurlencode/decode로 좁히고 있습니다.

rawurl 인코딩 된 문자열이 디코딩되면 다른 문자열 (유사한 문자열이지만 일부가 누락 됨)이 나타납니다. 확실하게, URL에 근본적인 것으로서 버그가있을 수는 없습니다 - 그래서 나는 잘못된 것을해야 할 것입니다. ... 문제는 내가 그것을 발견 할 수 없다는 것입니다, 지금까지 아무도 중 하나를 발견 할 수있을 것 같다

[추가 정보]

내가 심포니 웹 프레임 워크를 사용하고 (V1 .3.8), 이것은 아마 뒤에서 인코딩하고 디코딩하는 것에 의한 요청을 망칠 것입니다. 필자는 $ _POST 변수에서 토큰 매개 변수를 직접 가져 와서 Symfony가이 모든 문제의 주범인지 확인하려고합니다.

+0

좋아, 해결했습니다. 그것은 사실 내 사물 끝에 생긴 문제였습니다. rawurlencode()가 호출되기 전에 오류가 발생했습니다. – oompahloompah

답변

0

PHP에서 처리하기 때문에 토큰을 URL에서받을 때 rawurldecode 토큰을 가져올 필요가 없습니다. 예 : "foo.php? q = hello % 20world"결과는 $_GET['q']의 'hello world'가 아닌 'hello % 20world'가됩니다.

ECB 모드를 사용하고 있으므로 IV는 무시됩니다. 동일한 IV를 사용하여 암호화하고 해독하십시오.

무엇이 실패했는지에 따라 해독 된 문자열은 블록 크기만큼 패딩되어 원래 문자열보다 길 수 있습니다. 해독 후 문자열 길이를 전달하고 substr을 사용하여이 문제를 해결할 수 있습니다.