Пустое пространство PHP с 3DES Encrypt - PullRequest
0 голосов
/ 20 ноября 2011

У меня проблема (на стороне сервера), когда я шифрую данные с клиента и отправляю на веб-сервер с помощью метода 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 читает ее с пустым пространством.Если вместо этого нет «+», у меня нет проблем.

Например, это зашифрованная строка 4aY + na42iaPg + aep == в C #, когда я читаю в php, это 4aY a42iaPg aep == такесли я расшифровываю, если не совпадает с правильным словом.

я использую этот скрипт, чтобы начать чтение метода post

   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 +

Есть ли способ исправить это?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2011

Да, base64 декодирует + в пробел, используйте это:

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

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

0 голосов
/ 20 ноября 2011

Вы можете заменить '+' другим символом (который не используется base64) для отправки.Затем замените этот символ обратно на «+» для декодирования.

...