当前位置: 首页 > 面试题库 >

PHP-带GET查询的加号

缑文栋
2023-03-14
问题内容

我有一个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,问题是解密时所有空白都转换为加号。有任何想法吗?

我知道使用POST更有意义,但出于特定原因,我使用GET。 我会保留细节。


问题答案:

如果您阅读该错误报告的全部内容,则会看到对RFC 2396的引用。哪个表示+被
保留 。PHP将未编码的+符号转换为空格是正确的。

将密文返回给用户时,可以使用urlencode()密文。因此,当用户提交用于解密的密文时,您可以对其进行urldecode()。如果PHP也通过GET字符串输入,则PHP会自动为您执行此操作。

底线: +必须作为编码值%2B提交给PHP。



 类似资料:
  • 我正在尝试创建一个查询并根据自定义权重计算对其进行排序。 我需要一些帮助作为解决方案我来确实工作但性能是不是在那里我想它是 我拥有的是一个媒体对象。它有相关的评论、喜欢和命令。 以下查询目前有效,但完全是一团乱麻: 如您所见,我正在单独注释我将使用的所有参数,然后对查询集中的每个项目进行愚蠢的遍历,这是非常次优的。 我尝试做的一件事是: 但是注释中的类似操作是不可能的(尝试了一些有和没有Sum()

  • 背景:我有一个目录,其中包含许多导入SQL服务器的文件。 任务:创建PowerShell脚本,该脚本将拾取此目录中的文件,并使用SQL查询中的文件名。 最终目标:除了显示文件名之外,显示SQL结果,但显示的结果集也应该显示服务器中没有条目SQL文件。类似于SQL服务器查询中的。 Powershell代码 到目前为止完成的工作:我已经能够使用Get-ChildItem获取文件名并循环它们以获取查询结

  • 我想表达以下疑问 使用hibernate中的criteriabuilder。我没有成功,目前使用的是nativeQuery。 然而,问题的症结(我无法解决)似乎是我需要在子选择中返回两个属性。我找到的所有示例只返回一个属性。 这真的是jpa/hibernate的限制还是有办法做我想做的?任何帮助/指针都很感激。

  • 我想在php上创建一个函数,它将返回数组中sql查询的值。函数中的sql ode可以工作,我可以显示值。 但是当我想在一个函数中使用它时,它就不起作用了。我的语法中有什么错误?

  • php精简高速ip查询免费版3.0 演示地址:http://tbip.sinaapp.com 1.IP地址查询php版,采用淘宝IP地址库,非常的精准。并且会随着淘宝IP地址库实时更新。所以您获得的数据将会是最新的。 2.此3.0核心函数代码加密 其它2.0 1.0 版本完全开源 3.define('SINA_SAE', '0'); //是否启用新浪SAE平台1为使用0为不使用 如使用新浪SAE平

  • 我正在使用Tomcat 8。在一种情况下,我需要处理来自外部源的外部请求,其中请求有一个参数,由分隔。 请求如下所示: 在这种情况下,我得到以下错误。 编辑1 它适用于ApacheTomcat 8.0.30,但不适用于Tomcat 8.5