2017-01-10 6 views
0

公開鍵の交換にはECDiffieHellmanCngを使用し、次に暗号化/復号化にはAESを使用します。これらの2つの復号化/暗号化機能は、たまにしか動作しないのはなぜですか?

時には復号化が機能し、復号化の方法で次のようなエラーが発生します。パディングは無効であり、削除できません。
原因はどこですか?ここで

コードです:あなたはすでに暗号化と復号化の両方に同じパディングモードを使用しているので

private void Encryption(byte[] key, byte[] unencryptedMessage,out byte[] encryptedMessage, out byte[] iv) // encryption funkcija 
     { 
      using (Aes aes = new AesManaged()) 
      { 
       aes.Key = key; 
       //aes.GenerateIV(); 
       iv = aes.IV; 
       aes.Padding = PaddingMode.PKCS7; 

       // Encrypt the message 
       using (MemoryStream ciphertext = new MemoryStream()) 
       { 
        using (CryptoStream cs = new CryptoStream(ciphertext, aes.CreateEncryptor(), CryptoStreamMode.Write)) 
        { 
         cs.Write(unencryptedMessage, 0, unencryptedMessage.Length); 
         cs.Close(); 

        } 
        encryptedMessage = ciphertext.ToArray(); 
       } 
      } 
     } 

private void Decryption(byte[] encryptedMessage, byte[] iv, out byte[] decryptedMessage) 
     { 
      using (Aes aes = new AesManaged()) 
      { 
       aes.Key = receiversKey; 
       aes.IV = iv; 
       aes.Padding = PaddingMode.PKCS7; 
       // Decrypt the message 
       using (MemoryStream decryptedBytes = new MemoryStream()) 
       { 
        using (CryptoStream cs = new CryptoStream(decryptedBytes, aes.CreateDecryptor(), CryptoStreamMode.Write)) 
        { 
         cs.Write(encryptedMessage, 0, encryptedMessage.Length); 
         cs.Close(); 
        } 
        decryptedMessage = decryptedBytes.ToArray(); 
       } 
      } 
     } 
+0

どの行でエラーが発生しますか?キーとIVが同じであることを確認しましたか? – Codo

答えて

0

、無効なパディングエラーの最も可能性の高い原因は次のとおりです。

  1. 暗号化と復号化に使用される異なるキー。
  2. 無効な暗号化メッセージがDecryption()メソッドに渡されました。誤って空の文字列または暗号化されていないデータを渡す可能性があります。

これが役に立たない場合は、Encryption()Decryption()というメソッドを呼び出し、両方の場合に使用されるキーを処理するコードを提供してください。これらのメソッド自体は大丈夫だと思われるため、必要なのは、渡された引数にある可能性が最も高い問題です。

関連する問題