PHP-加密和解密奇怪的符号


PHP - Encrypt and decrypt weird sign

我的脚本遇到了一个非常奇怪的问题。我有这个脚本,它将作为POST与jQuery一起发布。这是被发送的URL:

url: 'index.php?i=v&p=k&token=<?php echo($tokenS); ?>&key=<?php echo $secretKey; ?>&token=<?php echo $tokenS; ?>&time=<?php echo $time; ?>&stime=<?php echo $stime; ?>'

在行动中,它看起来像这样:

url: 'index.php?i=v&p=k&token=F53A8D1113D8A158AD89F6A115DCB13174F0E0CC&key=56.50.57.61.106.118.118.114.60.49.49.105.113.113.105.110.103.48.101.113.111.61.51.53.58.56.52.53.56.54.55.53&token=F53A8D1113D8A158AD89F6A115DCB13174F0E0CC&time=15&stime=1386236453'

因此,URL包含了我需要验证的所有类型的信息。

当我必须验证key变量时,问题就来了。我有这个:

$key = inputFilter($_POST['key']);
            // Need to decrypt the key.
            $key = $this->sDecrypt($_POST['key']);
            /*
             * Need to split the key up..
             * After this, we should have an array looking like this:
             * -> Array ( [0] => ID [1] => URL [2] => TIME) <-
             * ID = id of the advertisement
             * URL = url of the advertisement
             * TIME = time of the advertisment started showing (Should match $stime)
             */
            $key = explode(';',$key);
            $key2 = explode(';',$this->sDecrypt($_SESSION['ad']['key']));

然后,在解密密钥后,我像这样验证它:

// Check if session key & post key is the same
            if($key[0] != $key2[0] || $key[1] != $key2[1] || $key[2] != $key2[2])
                die("error"); 

这就是它变得奇怪的地方。我在这里拿到die("error");

我试着打印出$key包含的内容:

    echo "<pre>";
    echo $key[0];
    echo "</pre>";
    echo "<pre>";
    echo $key2[0];
    echo "</pre>";

结果是:

$key[0] = �
$key2[0] = 608

因此,$key2[0]具有正确的值,但$key[0]没有。它包含某种堰的特征。

编辑:

var_dump( $_POST['key'] );NULL

知道为什么吗?

实际上,您的AJAX代码并没有按照您所说的那样张贴值,而是通过GET发送值。当你像你描述的那样建立一个URL时,无论你把请求设置为什么,这些参数都会在GET数组中

不要在$_POST['key']中查找,而是尝试在$_GET['key'] 中查找

或者,如果你真的想要,你可以把它换成$_REQUEST,它将解析COOKIE->GET->POST

的正常优先级

您的变量被发送到URL中的PHP脚本,这是一个GET方法。然而,在您的代码中,您使用的是POST变量:

$key = inputFilter($_POST['key']);

然后解码,这将导致不可预测的,当然是不想要的行为。将其更改为:

$key = inputFilter($_GET['key']);