2009-07-16 4 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 문을 사용한다 또한 시도/잡기가 다소 무의미 그 쪽 문제가 생각합니다..)

관련 문제