4

URLを介して暗号化された値を渡す必要があります。暗号化後に取得する値にスラッシュ(/)などの一部の文字を回避する方法はありますか?codeigniterでは、URLのパラメーターを区切るためにスラッシュなどの文字が使用されているためです。URLで暗号化された文字列を渡さないように提案したくないことに注意してください:)

4

4 に答える 4

7

暗号化後にPHPurlencode関数を使用します:http://php.net/manual/en/function.urlencode.phpurldecodeそしてGETデータを処理するスクリプトで使用します。

于 2012-05-02T07:36:55.447 に答える
5
class MY_Encrypt extends CI_Encrypt
{

    function encode($string, $key="", $url_safe=TRUE)
    {
        $ret = parent::encode($string, $key);

        if ($url_safe)
        {
            $ret = strtr(
                    $ret,
                    array(
                        '+' => '.',
                        '=' => '-',
                        '/' => '~'
                    )
                );
        }

        return $ret;
    }


    function decode($string, $key="")
    {
        $string = strtr(
                $string,
                array(
                    '.' => '+',
                    '-' => '=',
                    '~' => '/'
                )
            );

        return parent::decode($string, $key);
    }
}

-

$key = $this->config->item('encryption_key');

$outboundlink = urlencode( $this->encrypt->encode($segment, $key, TRUE) );

$inboundlink  = rawurldecode( $this->encrypt->decode( $segment, $key) );
于 2012-05-02T15:26:10.107 に答える
0

1つのアイデアは、0〜9とaf、およびオプションでxのみを使用して、暗号化された文字列を16進数として表すことです。

ただし、データを保護するためにTLS(より優れたSSL)を使用することをお勧めします。これは、おそらくJSを使用してデータを暗号化し、攻撃者がキーを認識できるようにするためです。

現在のスキームのセキュリティや暗号化を呼び出すのではなく、単に難読化してください。

于 2012-05-02T07:40:54.067 に答える
-2

必要なのは暗号化(セキュリティを意味する)ではなく、エンコーディングです。実際には、オプションは基本的に次のとおりです。

  • urlencode(文字列をある程度読みやすくしたい場合は、これを使用します。これにより、他の2つのオプションよりも短い文字列が得られます)
  • base64(文字列を読みやすくしたくない場合や、文字列のスペースを節約したい場合は、これを使用してください)
  • hex(文字列を読みやすくしたくなく、文字列の長さを気にしない場合は、これを使用します)

私はヘクスを選びません。文字列を読みやすくするかどうかを決定し、最初に2つのうちの1つを選択します。

于 2012-05-02T08:01:40.573 に答える