2017-01-10 4 views
0

Я использую ECDiffieHellmanCng для обмена открытыми ключами, а затем AES для шифрования/дешифрования.Почему эти две функции дешифрования/шифрования работают только иногда?

Иногда дешифрование работает, в другое время я получаю следующую ошибку в методе дешифрования: Заполнение недопустимо и не может быть удалено.
Где причина этого?

Вот код:

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() методы и обрабатывает ключ, используемый в обоих случаях. Это необходимо, потому что эти методы сами по себе выглядят нормально, наиболее вероятная проблема заключается в переданных аргументах.

Смежные вопросы