0

当我从客户端加密数据并使用 Post 方法发送到网络服务器时,我遇到了问题(服务器端)。

我使用此方法从 C# 客户端加密

public string Encrypt3DES(string strString)
    {
        DESCryptoServiceProvider DES = new DESCryptoServiceProvider();

        DES.Key = Encoding.GetBytes(this.Key);
        DES.Mode = CipherMode.ECB;
        DES.Padding = PaddingMode.Zeros;

        ICryptoTransform DESEncrypt = DES.CreateEncryptor();

        byte[] Buffer = encoding.GetBytes(strString);

        return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
    }

当我将加密的字符串发送到 PHP 时,如果该字符串中有 +,php 会用空格读取它。相反,如果没有任何“+”,我没有任何问题。

例如,这是 C# 中的加密字符串 4aY+na42iaPg+aep== 当我在 php 中读取时,它是 4aY a42iaPg aep== 所以如果我解密如果不匹配正确的单词。

我使用这个脚本开始阅读方法帖子

   if (isset($_POST['doConvalid'])){    
if ($_POST['doConvalid']=='Convalid')
{
    foreach($_POST as $keys => $values) {
    $data[$keys] =($values); // post variables are filtered
}

$cheking=$data['check'];
echo("Show checking = $checking"); //Here i read string with blank space instead +

有没有办法解决它?

4

2 回答 2

0

您可以将“+”替换为不同的字符(base64 未使用的字符)进行发送。然后将该字符替换回“+”以进行解码。

于 2011-11-19T20:17:13.077 回答
0

是的 base64 解码 + 到空间使用这个:

echo str_replace(" ","+",$_POST['string']);

http://en.wikipedia.org/wiki/Base64#URL_applications

于 2011-11-19T20:22:50.780 回答