2016-04-03 18 views
0

私のWebページのQueryStringにIDを渡したいと思っています。訪問者に数字を見せたくないので、RijndaelManagedアルゴリズムを使ってエンコードしています。ダブルエスケープシーケンスエラーの原因となる '+'などの文字。 暗号出力から一部の文字を除外する方法があるのだろうかと思っていました。C#のダブルエスケープシーケンスとRijndael Managed暗号化

私の暗号化コードは以下の通りです:

public static string Encrypt(string plainText) 
    { 
     byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText); 

     byte[] keyBytes = new Rfc2898DeriveBytes(PasswordHash, Encoding.ASCII.GetBytes(SaltKey)).GetBytes(256/8); 
     var symmetricKey = new RijndaelManaged() { Mode = CipherMode.CBC, Padding = PaddingMode.Zeros }; 
     var encryptor = symmetricKey.CreateEncryptor(keyBytes, Encoding.ASCII.GetBytes(VIKey)); 

     byte[] cipherTextBytes; 

     using (var memoryStream = new MemoryStream()) 
     { 
      using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)) 
      { 
       cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length); 
       cryptoStream.FlushFinalBlock(); 
       cipherTextBytes = memoryStream.ToArray(); 
       cryptoStream.Close(); 
      } 
      memoryStream.Close(); 
     } 
     return Convert.ToBase64String(cipherTextBytes); 
    } 

答えて

0

あなたは16進文字列の代わりに、base64文字列にあなたのByteArrayを変換することができます。 Hexは含まれています[a-f0-9] 詳細についてはthis questionを参照してください。

元の問題:実際には、クエリ文字列にURLエンコードを使用すると、+文字の問題が解決されます。

+0

私はURLエンコーディングを行いますが、Webサーバーはそれを+ –