McRypt和url编码问题


mcrypt and urlencoding issues

首先让我说清楚,我没有任何前端应用程序的控制(这是一个iOS应用程序,我必须生活在它的方式),这是使用身份验证令牌,我编码和解码通过以下功能在一个类。

我的应用程序返回基于用户名/密码的authToken,然后前端应用程序通过此authToken与我保持通信,我每次解码以找到用户信息。

正如你所知道的,这个算法生成的字符需要进行url编码,所以我在发送之前对它们进行url编码。

我注意到前端应用程序是自动url解码的authToken,然后发送回一个url解码的。

但这里事情变得复杂了,我在服务器上也有。htaccess我相信它可以编码或解码,不确定

最终结果是,当令牌到达应用程序时,它与我发送的内容不同。

不确定我能做些什么来正确处理它,我有前端应用程序url解码它,然后这个。htaccess做一些事情,最终结果我没有原始令牌。

public static function encrypt($data, $secret) {
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $key = pack('H*', $secret);
    return base64_encode($iv . mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv));
}
public static function decrypt($data, $secret) {
    $data = base64_decode($data);
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    $iv = substr($data, 0, $iv_size);
    $data = substr($data, $iv_size);
    $key = pack('H*', $secret);
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv), chr(0));
}

在我的视图层中,由上述函数生成的authToken。

echo urlencode($authToken)

。htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]

如果我的方法是错误的,你们怎么处理认证在那里?

编辑(示例数据):

+zrOchaEg6X9oXMsSz2yq7jcxGLsIsh5XpgUEEhqLuoGT6nqNcpwevPXCUCPiUQ9 (my app sent down this)
 zrOchaEg6X9oXMsSz2yq7jcxGLsIsh5XpgUEEhqLuoGT6nqNcpwevPXCUCPiUQ9 (front end app sent me back this)
EzfudmhVDKhfiZU1rN+h5vgdq+JsHFBI6suio2wwvS3415UvHcqaNkj6RCcPNcrN (my app sent this)
EzfudmhVDKhfiZU1rN h5vgdq JsHFBI6suio2wwvS3415UvHcqaNkj6RCcPNcrN (front end app sent this)
p45ho0s2qWBxzCWsOohSL5u+noxUdpkjfjVy/wib58Sx2lqXIfco3uHLpaiDLy58 (my app sent this)
p45ho0s2qWBxzCWsOohSL5u noxUdpkjfjVy/wib58Sx2lqXIfco3uHLpaiDLy58 (front end app sent me back this)
NBEwy2WAInAgqC54WR6kNHVVpTObN1x1Wbu9JRD/UTCuMLbtHAomHFWDX8olFrC9 (my app sent this)
NBEwy2WAInAgqC54WR6kNHVVpTObN1x1Wbu9JRD/UTCuMLbtHAomHFWDX8olFrC9 (front end app sent me back this)

取决于你的实现,如果在任何时候它将被传递作为一个get参数然后是的,但似乎你有问题与+号,而不是尝试使用rawurlencode()和rawurldecode()

除非你在显示文本时记录错误或执行某种解码,否则在我看来,你的iOS应用程序并没有真正的URL编码。

如果是这种情况,

不应该有普通的+符号,这样的字符应该在URL编码后用%XX替换。空格不是64进制的一部分,因此不应将空格转换为+号。

另一方面,发送的字符串看起来像64进制,所以也许你根本不需要64进制编码