2009-07-16 11 views
0

私は暗号化/復号化RijndaelManagedアルゴリズムを使用しています。暗号化/復号化でBase-64文字列に無効な文字が返される

GUIDを暗号化するうちに、暗号化アルゴリズムの途中で「%」記号が得られます。同じ暗号化されたGUIを復号化すると、「Base-64文字列の文字が無効です」というエラーが表示されます。これは、暗号化トークンに%記号があるために発生します。ここで

は、コードがこの例外を回避するために、私は解決策を教えてください、暗号化と復号化に

using System; 
using System.Configuration; 
using System.IO; 
using System.Security.Cryptography; 

public class ABC_RMCryptography 
{ 
    public string Decrypt(string strValueIn) 
    { 
     try 
     { 
      byte[] arrB = System.Convert.FromBase64String(strValueIn); 
      string strRC; 

      byte[] key = System.Convert.FromBase64String(ConfigurationManager.AppSettings["TokenEncryptionKey"]); 
      byte[] IV = System.Convert.FromBase64String(ConfigurationManager.AppSettings["TokenEncryptionVector"]); 

      MemoryStream memStream = new MemoryStream(arrB); 
      RijndaelManaged RMCrypto = new RijndaelManaged(); 
      CryptoStream CryptStream = new CryptoStream(memStream, RMCrypto.CreateDecryptor(key, IV), CryptoStreamMode.Read); 

      StreamReader SReader = new StreamReader(CryptStream); 
      strRC = SReader.ReadToEnd(); 
      SReader.Close(); 

      return strRC; 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 

    public string Encrypt(string strValue) 
    { 
     MemoryStream memStream = new MemoryStream(); 

     try 
     { 
      byte[] key = System.Convert.FromBase64String(ConfigurationManager.AppSettings["TokenEncryptionKey"]); 
      byte[] IV = System.Convert.FromBase64String(ConfigurationManager.AppSettings["TokenEncryptionVector"]); 

      RijndaelManaged RMCrypto = new RijndaelManaged(); 

      CryptoStream CryptStream = new CryptoStream(memStream, RMCrypto.CreateEncryptor(key, IV), CryptoStreamMode.Write); 
      StreamWriter SWriter = new StreamWriter(CryptStream); 

      SWriter.Write(strValue); 
      SWriter.Close(); 
      CryptStream.Close(); 

      byte[] b = memStream.ToArray(); 
      return Convert.ToBase64String(b); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 

    } 

    private string GenerateRMKey() 
    { 

     RijndaelManaged objRM = new RijndaelManaged(); 
     objRM.GenerateKey(); 
     return Convert.ToBase64String(objRM.Key); 

    } 

    private string GenerateRMIV() 
    { 

     RijndaelManaged objRM = new RijndaelManaged(); 
     objRM.GenerateKey(); 
     return Convert.ToBase64String(objRM.IV); 

    } 

} 

です。どのように%記号を避けるのですか?

暗号化/復号化はベース-64文字列

答えて

1

はどこ正確%から来ている?に無効な文字を与えますかEncryptメソッドの戻り値の一部であってはなりません。

私のと推測します。は、暗号化されたテキストにURLエンコードを実行しているということです。 %がどこにあり、その文字列をどうやって取得したかについてもっと詳しく教えていただければ、それは大いに役立ちます。

(余談としては、明示的にそれらを閉じるのではなく、その他のすべてのストリームに usingステートメントを使用する必要があります。また、あなたのtry/catchはやや無意味であるこれらの側の問題ががある。。)

関連する問題