【问题标题】:Two equal strings that are not equal两个不相等的相等字符串
【发布时间】:2015-09-25 08:46:14
【问题描述】:

我正在用 PHP 比较两个字符串。我确信字符串是相等的,因为我已将它们回显到网页上,但比较总是返回 "bad"

正在比较的字符串之一以前通过 AES-256 加密,并通过 cookie 存储。

Cookie 值: _uid=YJUZI3Kzi+YrmKay9H2+k0Bl+374u5JLeYF7BSLiNfo=:mjsAHC8qJX5UpF0p8gpuNKczieZObzbGlRszGjiDQX4=

加密功能:

<?php
// AES 256
function aes($a,$b,$c) {
    switch($a){
        case 1:
            $d="awkwardp_general";$e="xjoiw4rifo5jw4";
            $f=mysqli_connect("localhost",$d,$e,"awkwardp_main") or die(mysqli_error($f));
            $g=mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC);
            $h=mcrypt_create_iv($g,MCRYPT_DEV_URANDOM);
            $i="Value";
            $j="Keys";
            $k=array();
            $l=0;
            $m="SELECT ".$i." FROM `".$j."`";
            $n=mysqli_query($f,$m) or die(mysqli_error($f));
            while($o=mysqli_fetch_array($n)){
               $k[$l]=$o[$l];
               $l++;
            }
            $p=strlen($k[$b]);
            $q=mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$k[$b],$c,MCRYPT_MODE_CBC,$h);
            $q=base64_encode($h.$q);
            return $q;
            break;
        case 2:
            $d="awkwardp_general";$e="xjoiw4rifo5jw4";
            $f=mysqli_connect("localhost",$d,$e,"awkwardp_main") or die(mysqli_error($f));
            $g=mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC);
            $i="Value";
            $j="Keys";
            $k=array();
            $l=0;
            $m="SELECT ".$i." FROM `".$j."`";
            $n=mysqli_query($f,$m) or die(mysqli_error($f));
            while($o=mysqli_fetch_array($n)){
                $k[$l]=$o[$l];$l++;
            }
            $p=strlen($k[$b]);
            $q=base64_decode($c);
            $r=substr($q,0,$g);
            $s=substr($q,$g);
            $t=mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$k[$b],$s,MCRYPT_MODE_CBC,$r);

            return $t;
            break;
        default:

    }
}
?>

比较脚本:

<?php
$Value = explode(":",$_COOKIE['_uid']);
$_SERVER['REMOTE_ADDR'] == aes(2,1,$Value[0])
    ? printf("good")
    : printf("bad");
?>

谁能告诉我问题出在哪里?

【问题讨论】:

  • var_dump($_SERVER['REMOTE_ADDR']);var_dump(aes(2,1,$Value[0])); 另外,我在 _uid 的任何地方都看不到 :
  • 尝试使用:$_SERVER['REMOTE_ADDR'] == trim(aes(2,1, trim($Value[0]))) 以确保没有隐藏的空白。
  • @Rizier123 有效。我会接受这个作为答案。
  • @AbraCadaver _uid 是 URL 编码的。
  • @AbraCadaver Cookie 会自动编码。通过 url 解码器运行值...

标签: php mysql mcrypt


【解决方案1】:

你的问题可能是因为一些隐藏的空间。要删除它们,只需使用trim(),例如

$_SERVER['REMOTE_ADDR'] == trim(aes(2,1, trim($Value[0])))
                         //^^^^          ^^^^ See here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多