2016-05-03 14 views
0

暗号化と復号化のコードを実装しました。メソッドを暗号化するために渡された入力文字列の値を取得し、xmlファイルに格納されている暗号化値を取得します。復号化メソッドを使用してxmlファイルを読み取って値を読み取るために暗号化された値を取得した後。まれにエラーが出ます(暗号化された入力値が正しくなく、復号化された出力値です)。どのように私はこの問題を解決するのですか?私に共有してください。ここで サンプルコードCで暗号化/復号化中に文字が失われました。#

public static string Decrypt(string cipherText) 
{ 
    try 
    {     


     string incoming = cipherText.Replace('_', '/').Replace('-', '+'); 
     switch (cipherText.Length % 4) 
     { 
      case 2: incoming += "=="; break; 
      case 3: incoming += "="; break; 
     } 
     byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector); 
     byte[] cipherTextBytes = Convert.FromBase64String(incoming); 
     PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, null); 
     byte[] keyBytes = password.GetBytes(keysize/8); 
     RijndaelManaged symmetricKey = new RijndaelManaged(); 
     symmetricKey.Mode = CipherMode.CBC; 
     ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes); 
     MemoryStream memoryStream = new MemoryStream(cipherTextBytes); 
     CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read); 
     byte[] plainTextBytes = new byte[cipherTextBytes.Length]; 
     int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length); 
     memoryStream.Close(); 
     cryptoStream.Close(); 
     return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount); 
    } 
    catch (Exception ex) 
    {     

      return "Exception"; 
    } 
} 
+0

変更ASCIIエンコーディング。印刷可能でない文字を取り除くAsciiエンコーディング私は時々、暗号化がAsciiエンコーディングが削除している文字を生成していると思われます。 – jdweng

答えて

0

あなたはそれが(それはあなたがそれをやったとしてdecripting後に追加する必要があります動作しないでしょう解読にそれを逆にしていない場合は、データの最後に手動でパディングを追加します前)。

しかし、そのパディングは不要ですが、AES256はデータをパディングする必要がありますが、クリプトストリームがそれを行います。パディングのものをすべて削除するとうまくいきます。

+0

私は方法を暗号化 – somu

0

使用トリム()関数と空白がある場合、この問題が発生する可能性がありWHITE SPACESすべての

を削除します。 Trim()関数を使用して空白を削除します。

例 - :UTF8エンコーディングにcipherText.Trim()

+0

このメッセージをありがとう。しかし、私はすでにこの方法を試しています – somu

関連する問題