2012-04-16 7 views
-1

PHPでBase32またはBase64のカスタム実装(ライブラリまたはクラス/関数のセット)が必要ですBase32またはBase64のカスタム実装

関数はURLセーフストリングを返します。

+3

なぜhttp://php.net/manual/fr/function.base64-encodeを。 PHP? –

+1

そして、http://php.net/base_convert - マニュアルのどこにいてもすべてのメモをdum-te-dumにあります。 – hakre

+0

**カスタム**実装が必要なのはなぜですか? –

答えて

-1

これらの関数を使用して、文字列のURLを安全にします。

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

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

あなたが関数内でbase64でビルドへのアクセスを持っていないので、私はあなたにこの提案:

<?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'が存在します。 –

関連する問題