2009-09-28 2 views
0

다음은 현재 사용중인 암호화 기능입니다.알파벳과 암호 만위한 PHP와 Mcrypt?

define('ENCRYPT_KEY', 'ldkKKmeJddeFffKdjeddd'); 

function market_dock_api_encrypt($string) { 
     $key = ENCRYPT_KEY; //preset key to use on all encrypt and decrypts. 
     $result = ''; 
    for($i=0; $i<strlen($string); $i++) { 
    $char = substr($string, $i, 1); 
    $keychar = substr($key, ($i % strlen($key))-1, 1); 
    $char = chr(ord($char)+ord($keychar)); 
    $result.=$char; 
    } 
    return urlencode(base64_encode($result)); 
} 

난 그냥이 때로는 거기에 "%"등의 문자 키에 결과를 실현하고, 내가하는 URL에서 사용할 수있는 키가 필요합니다. 이를 위해 이것을 어떻게 변경할 수 있습니까? 나는 그것이 base64_encode 부분이하는 것과 같은 인상을 받고있었습니다. 분명히, 나는 틀렸다.

답변

1

반환 된 문자열은 URL에서 사용하는 것이 안전합니다. "%"는 urlencode()을 통해 전달됩니다. base64_encode()은 특별히 URL이 아닌 ASCII를 통해 이진 데이터를 전달하도록 설계되었으므로 "=", "+"및 "/"를 사용할 수 있습니다.

RFC 4648의 5 절에 설명 된대로이 기능은 "base64url"을 지원

<?php 
function base64url_encode($plainText) 
{ 
    $base64 = base64_encode($plainText); 
    $base64url = strtr($base64, '+/', '-_'); 
    return ($base64url);  
} 
?> 
"자료 64 인코딩 URL와 파일 이름 안전 알파벳"기능 설명에서

URI에서 사용하기 위해 trailing = '을 rtrim (또는 이스케이프) 할 수 있습니다.

사용하는 경우 분명히 디코더도 만들어야합니다.

+0

문자열은 "zdrK2ou % 2B4cyv09bMq9nUrNHTx83Fks % 2FT2A % 3D %"와 같이 사용하기에 안전하지 않습니다. 이것은 실제 예이며 좋지 않습니다. 그래서 다시, 왜 이런 링크 (% 기호가 붙은)로 끝나야합니까? – coderama

+0

* 사용하기에 안전합니다. %는 안전하게 만듭니다. – Greg

+0

예 : www.mysite.com/?c=zdrK2ou%2B4cyv09bMq9nUrNHTx83Fks%2FT2A%3D%와 같이 사용하면 잘 작동하지 않습니다. 내가 뭘 놓치고 있는지 알기나 해? – coderama