【问题标题】:Avoid specific characters while encrypting in codeigniter?在codeigniter中加密时避免使用特定字符?
【发布时间】:2012-05-11 16:10:18
【问题描述】:

我需要通过 URL 传递一些加密值。有什么方法可以避免加密后我们得到的值中出现一些字符,例如斜杠(/)?因为在 codeigniter 中,使用斜杠等字符来分隔 URL 中的参数。请注意,我不希望任何建议不要在 URL 中传递加密字符串 :)

【问题讨论】:

  • 我想要的是一种不会在结果中产生斜杠(/)的编码或加密方法。

标签: php codeigniter


【解决方案1】:
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) );

【讨论】:

    【解决方案2】:

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

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

    我不会选择十六进制。决定是否要让字符串清晰易读,然后先选择两者中的一个。

    【讨论】:

    • 什么很难理解:OP 有一个加密字符串(是的,加密的。CI 有一个本机加密类,他可能正在使用它),现在想将它传递给 url。是什么让你觉得 OP 不知道编码和加密的区别?
    • 是的,我需要一个编码,但它不会产生诸如斜杠之类的值。
    • 好的,抱歉,我现在明白该字符串已经加密,然后需要对其进行编码。对此感到抱歉。
    • 然后你可以编辑这个更好或删除这个不恰当的答案..!
    【解决方案3】:

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

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

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

    【讨论】:

    • OP 询问如何将加密字符串传递给 url,而不是如何加密,也不是如何保护数据;他正在加密(CI 有一个本机加密类,他可能正在使用它),不管你喜不喜欢,现在需要传递加密数据而不弄乱路由器类
    【解决方案4】:

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

    【讨论】:

    • 最好的一个,但请确认另外一件事会导致 URL 太长错误吗?
    猜你喜欢
    • 2014-06-05
    • 1970-01-01
    • 2023-03-07
    • 2021-02-16
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    相关资源
    最近更新 更多