2017-03-16 6 views
-1

だから、C#DES対称アルゴリズムDES C#。 Base64で

を使用してデータを暗号化しようとしているイムは、次のコード

  static public string Encrypt(string _dataToEncrypt) { 
       SymmetricAlgorithm algorithm = DES.Create(); 
       ICryptoTransform transform = algorithm.CreateEncryptor(key, iv); 
       byte[] inputbuffer = Encoding.Unicode.GetBytes(_dataToEncrypt); 
       byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length); 
       return Convert.ToBase64String(outputBuffer); 
      } 

      static public string Decrypt(string _dataToDecrypt) { 
       SymmetricAlgorithm algorithm = DES.Create(); 
       ICryptoTransform transform = algorithm.CreateDecryptor(key, iv); 
       byte[] inputbuffer = Convert.FromBase64String(_dataToDecrypt); // Here is the problem. 
       byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length); 
       return Encoding.Unicode.GetString(outputBuffer); 
      } 

とIMの文字列は、文字の数が偶数のとき、それが動作エラーにSystem.FormatException: 'Invalid length for a Base-64 char array or string.'

を取得しています。

奇数文字のデータを暗号化/復号化することは本当ですか?

+0

新しいコードでDESを使用しないでください。これは安全ではなく、AESよりも優れています。 – zaph

+0

'_dataToDecrypt'を含むエラーを示すサンプル入出力を提供します。 – zaph

答えて

1

DES、およびAESには暗号化できるものに制限がありませんが、問題は他の場所です。

エラーが発生した行があるため、これはBas64エンコーディングの問題です。

おそらく末尾の "="文字がBase64から削除されました。

情報:そのような入力は、ブロックサイズの倍数でなければならないよう

DESは、DESの8バイトブロックベースの暗号化アルゴリズムです。入力がではない場合は、常にを追加する必要があります。パディングを指定することで実装を可能にする最も簡単な方法です。通常はDESのPKCS#5です。

SymmetricAlgorithmでPaddingプロパティPKCS7を使用する場合は、すべてを完全に指定し、デフォルトに依存しないようにするのが常にベストです。

algorithm.Padding = PaddingMode.PKCS7;