首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GET查询的Plus签名

使用GET查询的Plus签名
EN

Stack Overflow用户
提问于 2010-04-20 00:46:32
回答 6查看 49.1K关注 0票数 45

我有一个PHP脚本,它通过下面的方法对字符串进行基本加密:

代码语言:javascript
复制
<?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=the快狐

它将以加密字符串的形式返回这个字符串:

LCuT/ieVa6cl3/4 4VtzE+jd9QPT3kvHYYJFQG6tY3P0Q=

现在,要解密字符串,只需将“方法”查询更改为“解密”,如下所示:

Encrypt.php?method=decrypt&str=LCuT/ieVa6cl3/4VtzE+jd9QPT3kvHYYJFqG6tY3P0Q=

唯一的问题是,当加密的字符串被解密时,它会返回以下内容:

ƒ§rYV}_5š·n-μ(n_x_8;b)

我已经将问题缩小到加密字符串中的加号。PHP的GET方法似乎将一个加号转换成一个空格。我搜索了这个bug,发现它已经被这里归档了。我尝试过在那一页上列出的不同方法以及其他方法,但都没有成功。我得到的最接近的方法是:

代码语言:javascript
复制
$fixedstring = str_replace(" ", "+", $string);

然后在加密方法中使用$fixedstring,问题是,在解密时,所有空格都转换为加号。有什么想法吗?

我知道使用POST会更有意义,但我使用GET是出于特定的原因。我将不谈细节。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-04-20 00:51:47

如果您将阅读整个bug报告,您将看到对RFC 2396的引用。它声明+是保留的。PHP在将未编码+符号转换为空格时是正确的。

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

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

票数 54
EN

Stack Overflow用户

发布于 2011-08-17 14:20:48

我意识到这是一个老问题,但我正在寻找一个类似问题的解决方案,在GET字符串中使用+符号。我偶然发现了这一页,我想我会分享我想出的解决方案。

代码语言:javascript
复制
<?php
$key = 'secretkey';
$string = $_GET['str'];

if ($_GET['method'] == "decrypt")
{
    $string = urlencode($string);
    $string = str_replace("+", "%2B",$string);
    $string = urldecode($string);
    $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;
?>
票数 13
EN

Stack Overflow用户

发布于 2018-05-24 22:36:10

以上答案对我都没有用,我用以下方法修正了"+“符号问题

代码语言:javascript
复制
rawurldecode() 

代码语言:javascript
复制
 rawurlencode() 
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2671840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档