Ich sah, dass eine andere Fragen zu diesem Thema existiert, aber ich habe jede Frage überprüft und ich kann mein Problem nicht lösen .. Dies ist meine Methode zu entschlüsseln und eine andere Methode zum Entschlüsseln aufrufen Verfahren mit den erforderlichen Parametern:Padding ist ungültig und kann nicht entfernt werden C# entschlüsseln
public string Decrypt(AesOperationType operationType, byte[] criptotext, byte[] Key, byte[] initVector)
{
string plaintext = null;
using (Aes aesAlg = Aes.Create())
{
aesAlg.KeySize = 128;
aesAlg.Key = Key;
aesAlg.IV = initVector;
if (operationType == AesOperationType.Cbc)
{
aesAlg.Mode = CipherMode.CBC;
}
else if (operationType == AesOperationType.Cfb)
{
aesAlg.Mode = CipherMode.ECB;
}
//apelam functia de decriptare
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msDecrypt = new MemoryStream(criptotext))
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
plaintext = srDecrypt.ReadToEnd();
}
}
}
Console.WriteLine("Start decrypt for criptotext : " + BitConverter.ToString(criptotext) + "\n");
Console.WriteLine("Plaintext after decrypt : " + plaintext + "\n");
return plaintext;
}
public byte[] Encrypt_Call()
{
var key = "1212121212121212";
var key_byte = Encoding.ASCII.GetBytes(key);
using (Aes aess = Aes.Create())
{
var iv = aess.IV;
cryptdecrypt object = new cryptdecrypt();
var result = object.Encrypt(AesOperationType.Cbc, "plaintext", key_byte, iv);
return result;
}
}
public void Decrypt_Call()
{
var key = "1212121212121212";
var key_byte = Encoding.ASCII.GetBytes(key);
using (Aes aess = Aes.Create())
{
var iv = aess.IV;
cryptdecrypt object = new cryptdecrypt();
var cryptotext = Encrypt_Call();
var result = object.Decrypt(AesOperationType.Cbc, cryptotext , key_byte, iv);
}
}
Encrypt-Methode funktioniert gut, aber bei der Entschlüsselung Methodenaufruf, begegne ich diesen Fehler:
Padding is invalid and cannot be removed.
ich habe auch versucht csDecrypt.FlushFinalBlock()
diese Zeile vor diesem Spiel zu setzen:
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
Der Fehler verschwindet und als Ergebnis bekomme ich eine leere Zeichenfolge.
Irgendwelche Ideen, um das zu lösen?
Wo ist die IV angegeben? – zaph
Sie müssen den gleichen Schlüssel * und * IV für die Verschlüsselung und Entschlüsselung verwenden. Es sieht so aus, als ob Sie die IV sowohl bei den Verschlüsselungs- als auch bei den Entschlüsselungsmethoden zufallsgeneriert haben und daher nicht identisch sind. – Iridium
@KurokawaMasato AesOperationType ist eine Klasse, die eine Enum mit Cbc, Cfb enthält. Dort gibt es kein Problem – Carto