我使用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 :(得分:1)
由于您已经使用相同的填充模式进行加密和解密,因此填充无效错误的最可能原因是:
Decryption()
方法的加密邮件无效。您可能会错误地传递空字符串或未加密的数据。如果这样做无效,请提供调用Encryption()
和Decryption()
方法的代码,并处理两种情况下使用的密钥。它是必需的,因为这些方法本身看起来不错,最可能的问题是传递参数。