【发布时间】:2012-05-11 16:10:18
【问题描述】:
我需要通过 URL 传递一些加密值。有什么方法可以避免加密后我们得到的值中出现一些字符,例如斜杠(/)?因为在 codeigniter 中,使用斜杠等字符来分隔 URL 中的参数。请注意,我不希望任何建议不要在 URL 中传递加密字符串 :)
【问题讨论】:
-
我想要的是一种不会在结果中产生斜杠(/)的编码或加密方法。
标签: php codeigniter
我需要通过 URL 传递一些加密值。有什么方法可以避免加密后我们得到的值中出现一些字符,例如斜杠(/)?因为在 codeigniter 中,使用斜杠等字符来分隔 URL 中的参数。请注意,我不希望任何建议不要在 URL 中传递加密字符串 :)
【问题讨论】:
标签: php codeigniter
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 加密数据,因此攻击者可以看到密钥。
不要称当前方案安全或加密,而只是混淆。
【讨论】:
加密后使用 PHP urlencode 函数:http://php.net/manual/en/function.urlencode.php 并在处理 GET 数据的脚本中使用 urldecode。
【讨论】: