0

クライアントからのデータを暗号化し、Post Method を使用して Web サーバーに送信するときに (サーバー側で) 問題が発生します。

i このメソッドを使用して 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 デコード + スペースにこれを使用:

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

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

于 2011-11-19T20:22:50.780 に答える
0

「+」を別の文字 (base64 では使用されないもの) に置き換えて送信することができます。次に、デコードのためにその文字を「+」に戻します。

于 2011-11-19T20:17:13.077 に答える