为什么这两个解密/加密函数有时只能工作?

时间:2017-01-10 05:56:15

标签: c# encryption aes

我使用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();
                }
            }
        }

1 个答案:

答案 0 :(得分:1)

由于您已经使用相同的填充模式进行加密和解密,因此填充无效错误的最可能原因是:

  1. 用于加密和解密的不同密钥。
  2. 传递给Decryption()方法的加密邮件无效。您可能会错误地传递空字符串或未加密的数据。
  3. 如果这样做无效,请提供调用Encryption()Decryption()方法的代码,并处理两种情况下使用的密钥。它是必需的,因为这些方法本身看起来不错,最可能的问题是传递参数。