2012-04-16 4 views
-1

PHP에서 Base32 또는 Base64의 사용자 정의 구현 (라이브러리 또는 클래스/함수 집합)이 필요합니다.Base32 또는 Base64의 사용자 정의

함수는 URL 안전 문자열을 반환해야합니다.

+3

왜 http://php.net/manual/fr/function.base64-encode. PHP? –

+1

그리고 http://php.net/base_convert - 설명서의 모든 곳에 모든 메모가 있습니다, 덤 - te - 덤. – hakre

+0

** 사용자 정의 ** 구현이 필요한 이유는 무엇입니까? –

답변

-1

문자열 보안을 위해이 함수를 사용합니다. base64로 기능 구축에 액세스 권한이 없기 때문에

function base64_url_encode($input) { 
return strtr(base64_encode($input), '+/=', '-_,'); 
} 

function base64_url_decode($input) { 
return base64_decode(strtr($input, '-_,', '+/=')); 
} 
1

나는 당신이 제안 :

<?php 

echo bencode("Gabriel Malca"); 
// R2FicmllbCBNYWxjYQ== 

function bencode($string='') { 
    $binval = convert_binary_str($string); 
    $final = ""; 
    $start = 0; 
    while ($start < strlen($binval)) { 
     if (strlen(substr($binval,$start)) < 6) 
      $binval .= str_repeat("0",6-strlen(substr($binval,$start))); 
     $tmp = bindec(substr($binval,$start,6)); 
     if ($tmp < 26) 
      $final .= chr($tmp+65); 
     elseif ($tmp > 25 && $tmp < 52) 
      $final .= chr($tmp+71); 
     elseif ($tmp == 62) 
      $final .= "+"; 
     elseif ($tmp == 63) 
      $final .= "/"; 
     elseif (!$tmp) 
      $final .= "A"; 
     else 
      $final .= chr($tmp-4); 
     $start += 6; 
    } 
    if (strlen($final)%4>0) 
     $final .= str_repeat("=",4-strlen($final)%4); 
    return $final; 
} 

function convert_binary_str($string) { 
    if (strlen($string)<=0) return; 
    $tmp = decbin(ord($string[0])); 
    $tmp = str_repeat("0",8-strlen($tmp)).$tmp; 
    return $tmp.convert_binary_str(substr($string,1)); 
} 

?> 
+0

이것은 유일한 정답입니다. 이 질문은 수정해서는 안됩니다. 보안 문제로 인해 일부 호스트에서 base64_ 기능을 사용하지 못하게 할 수 있습니다. 예, 표준 PHP 설치가 거의 불가능합니다. 그러나 내장 함수를 비활성화하는 것이 가치있는 경우가 있습니다. –

+0

@JohnHunt URL 안전이 아니기 때문에 이것이 올바르지 않습니다. –

+0

@JonGrant 그래서 urlencode와 urldecode가 존재합니다. –

관련 문제