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

一种想法是仅使用 0-9 和 af 以及可选的 x 将加密字符串表示为十六进制。

但我建议您使用 TLS(更好的 SSL)来保护您的数据,因为现在您可能使用 JS 加密数据,因此攻击者可以看到密钥。

不要称当前方案安全或加密,而只是混淆。

于 2012-05-02T07:40:54.067 回答
-2

您想要的不是加密(这意味着安全),而是编码。在实践中,您的选择基本上是:

  • urlencode(如果您希望字符串有点清晰,请使用此代码。这也会为您提供比其他两个选项更短的字符串)
  • base64(如果您不希望字符串清晰易读并且还想节省字符串中的空间,请使用它)
  • 十六进制(如果您不希望字符串清晰且不关心字符串长度,请使用此选项)

我不会选择十六进制。确定您是否希望字符串清晰易读,然后首先选择两者中的一个。

于 2012-05-02T08:01:40.573 回答