PHP:ASCII和UTF-8字符串比较

时间:2013-11-12 22:25:22

标签: php utf-8 ascii

我有以下test.php脚本:

$AES_IV = "4epZqMl8BQukhip6WQjQHg==";
$AES_KEY = "zvKmer0cPiJdQQ1RPjQOCF/wURt+31UdingRoPj4+Yc=";

$guid = $_GET["guid"];
$encryptedGuid = urldecode($_GET["encryptedGuid"]);

$decryptedGuid = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, base64_decode($AES_KEY), base64_decode($encryptedGuid), MCRYPT_MODE_CBC, base64_decode($AES_IV));

echo "Guid is: ".$guid."</br>";
echo "Decrypted GUID is: ".$decryptedGuid."</br>";

if ($decryptedGuid === $guid)
{
    echo "Guid and decrypted Guid are equals.";
}
else 
{
    echo "Guid and decrypted Guid are not equals.";
}

我将此脚本称为如下:

http://localhost:8087/test/test.php?guid=08201E62-DFA5-8A50-ACFC-A811871804CD&encryptedGuid=ED40y72BJvzXmN0Aj9eb85VdIJKu6LUYQuYSWMPOhIQcm5SIquZAhRMmhsC7ax2e

Test.php脚本应显示“Guid和解密Guid等于”。但它永远不会发生。我试图检查字符串的编码,$ guid是ASCII,$ encryptedGuid是UTF-8。你能帮我解决一下这个问题吗?我试图将ASCII转换为UTF-8但我没有成功,因为例如iconv功能再次是ASCII。我认为将ASCII转换为UTF-8可以解决方案,但我不确定$ _GET是否总是返回ASCII。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我有一个类似的问题,我能够解决这个问题归功于Dennis&#39;关于填充的评论。

解密我的AES字符串后,我注意到URL中的一个特定参数不是很正确......

E.g. test=1&foo=bar

看起来很好。但是,当我尝试与URL(bar)中的最终值进行字符串比较时,它永远不会成真。

if ($foo == 'bar')

所以,我使用bin2hex比较了字符串,在param值的末尾添加了某种重复的字符串(0505050505)。我没有意识到这是通过加密将字符串添加到字符串中。

出于某种原因,rtrim并没有帮助我,所以我所做的是在加密之前在我的URL末尾添加了一个无用的参数(例如padding = 1)。这确保了我的最后一个重要的&#34; params没有将填充添加到字符串中。