PHP-带GET查询的加号
我有一个PHP脚本,可以通过以下方法对字符串进行基本加密:
<?php$key = 'secretkey';
$string = $_GET['str'];
if ($_GET['method'] == "decrypt")
{
$output = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
}
if ($_GET['method'] == "encrypt")
{
$output= base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
}
echo $output;
?>
用于加密字符串的URL的示例如下所示:
Encrypt.php?method = encrypt&str =快速狐狸
它将返回此作为加密的字符串:
LCuT / ieVa6cl3 / 4VtzE + jd9QPT3kvHYYJFqG6tY3P0Q =
现在要解密字符串,您需要做的就是将“方法”查询更改为“解密”,如下所示:
Encrypt.php?method = decrypt&str = LCuT / ieVa6cl3 / 4VtzE +
jd9QPT3kvHYYJFqG6tY3P0Q =
唯一的问题是,当解密该加密的字符串时,它将返回以下内容:
¬ƒ§rYV}̳5Äš·nßì(ñX8Þ; b
我已将问题缩小为加密字符串中的加号。PHP的GET方法似乎将加号转换为空格。我搜索了这个错误,发现它已经在这里提交了。我尝试了该页面上列出的其他方法以及其他方法,但均未成功。我得到的最接近是通过使用此:
$fixedstring = str_replace(" ", "+", $string);
然后在加密方法中使用$ fixedstring,问题是解密时所有空白都转换为加号。有任何想法吗?
回答:
如果您阅读该错误报告的全部内容,则会看到对RFC 2396的引用。哪个表示+被
。PHP将未编码的+符号转换为空格是正确的。
将密文返回给用户时,可以使用urlencode()密文。因此,当用户提交用于解密的密文时,您可以对其进行urldecode()。如果PHP也通过GET字符串输入,则PHP会自动为您执行此操作。
+必须作为编码值%2B提交给PHP。
以上是 PHP-带GET查询的加号 的全部内容, 来源链接: utcz.com/qa/415087.html