1

テキストを暗号化して、QueryString経由で送信しています。

"8ZnSq13yv2yYVDsehDnNUNp/yIFqsAQh4XNPbV1eLMpk/dMWpc/YnMMEBy29MlgcYqpV2XPOf/Rpiz5S85VN/fkLbGTCkL/clBHh983Cp s="

復号化機能を以下に示します

public static string Decrypt(string stringToDecrypt)//Decrypt the content
{
    try
    {
        byte[] key = Convert2ByteArray(DESKey);
        byte[] IV = Convert2ByteArray(DESIV);
        int len = stringToDecrypt.Length;
        byte[] inputByteArray = Convert.FromBase64String(stringToDecrypt);

        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
        MemoryStream ms = new MemoryStream(); 

        CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
        cs.Write(inputByteArray, 0, inputByteArray.Length);

        cs.FlushFinalBlock();

        Encoding encoding = Encoding.UTF8; return encoding.GetString(ms.ToArray());
    }
    catch (System.Exception ex)
    {
        throw ex;
    }
}

この問題を解決するにはどうすればよいですか?

4

4 に答える 4

6

最後から3番目の文字はスペースです。+クエリ文字列に配置される前は、元の文字列に含まれていたと思います。+はスペースを表すURLの特殊文字であるため、QueryStringはこれをスペースに変換します。

Base64文字列を通過させてみてください

Server.UrlEncode(string); 

リダイレクトする前に&それは+を%urlcharに適切にエスケープし、それを通過させます

Server.UrlDecode(string);

反対側で解析する前に

于 2009-04-29T10:52:16.240 に答える
0

との間の最後にスペースがpありsます。これは、base64文字列で許可されている文字ではありません。

于 2009-04-29T10:51:27.800 に答える
0

問題は、文字列にリクエストクエリで特別な意味を持つ文字が含まれている可能性があります。たとえば、'/'、'='、および''。

送信する前に文字列をエンコードするか、さらに良いことに、リクエストのフォーム本文に追加して、クエリ文字列の代わりにその方法で送信することができます。

于 2009-04-29T10:53:03.663 に答える
-1

私には短い文字に見えます...Base64文字列の長さは4で割り切れる必要があり、必要に応じて末尾の「=」で埋められます-末尾の「=」がありませんか? Rpiz5S85VN / fkLbGTCkL / clBHh983Cps == "?

于 2009-04-29T10:54:39.400 に答える