我需要通过 URL 传递一些加密值。有什么方法可以避免加密后我们得到的值中出现一些字符,例如斜杠(/)?因为在 codeigniter 中,使用斜杠等字符来分隔 URL 中的参数。请注意,我不希望有任何建议不要在 URL 中传递加密字符串 :)
问问题
6654 次
4 回答
7
加密后使用 PHPurlencode
函数:http: //php.net/manual/en/function.urlencode.php并urldecode
在处理 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 回答