在代码点火器中加密时避免使用特定字符


Avoid specific characters while encrypting in codeigniter?

我需要通过URL传递一些加密值。有没有办法避免加密后获得的值中的某些字符,例如斜杠 (/)?因为在编码器点火器中,斜杠等字符用于分隔 URL 中的参数。请注意,我不希望有任何建议不要在 URL :)<</p>

div class="answers" 中传递加密字符串>加密

后使用 PHP urlencode 函数:http://php.net/manual/en/function.urlencode.php 并在处理 GET 数据的脚本中使用urldecode

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) );

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

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

不要调用当前方案的安全性或加密,而只是混淆。

你想要的

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

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

我不会选择十六进制。决定是否希望字符串清晰易读,并首先选择两者之一。