2017-07-07 2 views
-1

私はbase64を使用して文字列を暗号化および復号化しようとしていますが、文字列を復号化しようとしています。c#base64 encrpytion。 decrpytionで無効な長さのエラー

私が受信していますエラーがある:

{にSystem.FormatException:ベース64 char配列または文字列の長さが無効です。
MemoryStream ms = new MemoryStream(Convert.FromBase64String(inString));

Encrpyt /復号化機能:以下復号化機能で、この行で

//ENCRYPT  
public static bool stringEncrypt(string inString,ref string outstring) 
{ 
    try 
    { 
     if(String.IsNullOrEmpty(inString)){return false;} 



     DESCryptoServiceProvider provider = new DESCryptoServiceProvider(); 

     MemoryStream ms = new MemoryStream(); 
     CryptoStream cs = new CryptoStream(ms,provider.CreateEncryptor(PWbytes,PWbytes),CryptoStreamMode.Write); 
     StreamWriter sw = new StreamWriter(cs); 

     sw.Write(inString); 
     sw.Flush(); 
     cs.FlushFinalBlock(); 
     sw.Flush(); 

     outstring = Convert.ToBase64String(ms.GetBuffer(),0,(int)ms.Length); 

     return true; 
    } 
    catch(Exception ex) 
    { 
     clsCommonBase.AppendToExceptionFile("Encrypt : " + ex.Message); 
     return false; 
    } 
} 

//DECRPYT 
public static bool stringDecrypt(string inString,ref string outstring) 
{ 
    try 
    { 
     if(String.IsNullOrEmpty(inString)){return false;}; 

     DESCryptoServiceProvider provider = new DESCryptoServiceProvider(); 

     MemoryStream ms = new MemoryStream(Convert.FromBase64String(inString)); 
     CryptoStream cs = new CryptoStream(ms, provider.CreateDecryptor(PWbytes,PWbytes),CryptoStreamMode.Read); 
     StreamReader sr = new StreamReader(cs); 

     outstring = sr.ReadToEnd(); 

     return true; 
    } 
    catch(Exception ex) 
    { 
     clsCommonBase.AppendToExceptionFile("Decrypt : " + ex.Message); 
     return false; 
    } 
} 

}

+0

さて、あなたはあなたが渡している文字列を検討してきましたか?おそらくそれは有効なbase64ではありません...私の推測では、以前の 'passwordEncrypt'呼び出しの結果ではないということです。 (私はあなたの例外処理を再訪することを強く勧めます、btw ...これはC#の例外を処理する慣習的な方法ではありません) –

+0

https://stackoverflow.com/questions/11743160/how-do-i-encode -and-decode-a-base64-string –

+2

[mcve]と暗号化/復号化しようとしている文字列を投稿してください。 –

答えて

1

は、次のリンクに簡単な解決策を使用して解決 How do I encode and decode a base64 string?

また、プレーンテキスト文字列が有効な長さのbase64文字列に変換されるように、エンコード関数にいくつかのコードを追加しました。

コード:

public static string Base64Encode(string plainText) 
{ 

      //check plain text string and pad if needed 
      int mod4 = plainText.Length % 4; 
      if (mod4 > 0) 
      { 
       plainText += new string('=', 4 - mod4); 
      } 

      //convert to base64 and return 
      var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText); 
      return System.Convert.ToBase64String(plainTextBytes); 
     } 

     public static string Base64Decode(string base64EncodedData) 
     {   
      //decode base64 and return as string 
      var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData); 
      return System.Text.Encoding.UTF8.GetString(base64EncodedBytes); 
     } 
関連する問題