Ich muss Daten mit Standard C# AesCryptoServiceProvider entschlüsseln, die mit Bouncy Castle AesFastEngine auf der Java-Seite verschlüsselt wurden. (Um die Daten mit der c#-Implementierung von Bounca Castle zu entschlüsseln ist kein Problem)
Gibt es eine Möglichkeit, dies zu tun?
Ich finde den IV nicht, der in der Bouncy Castle-Implementierung verwendet wird... Gibt es einen?
Über jede Hilfe würde ich mich sehr freuen! Markus
EDIT:
Der folgende Code wird zur Initialisierung der AesFastEngine verwendet:
BlockCipher coder = new AESFastEngine();
CFBBlockCipher cfbCipher = new CFBBlockCipher(coder, 8);
StreamCipher streamCipher = new StreamBlockCipher(cfbCipher);
streamCipher.Init(true, keyParameter);
streamCipher.ProcessBytes(data, 0, data.Length, encodedMessageBytes, 0);
EDIT:
Hallo Grec, danke für deine Antwort, aber es funktioniert immer noch nicht... Ich habe eine Beispiellösung zum Herunterladen aquí .
Wenn Sie auf die beiden Buttons klicken, erhalten Sie bereits ein anderes verschlüsseltes Feld...? Das Entschlüsseln des mit bouncy castle erzeugten Arrays führt zu einer Ausnahme, die besagt, dass die verschlüsselten Daten eine ungültige Länge haben...
Hier ist der Code, den ich für die Entschlüsselung geschrieben habe:
AesManagedAlg = new AesManaged();
AesManagedAlg.Mode = CipherMode.CBC;
AesManagedAlg.FeedbackSize = 8;
AesManagedAlg.Key = key;
// Use Test
AesManagedAlg.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
// Create a decrytor to perform the stream transform.
ICryptoTransform decryptor = AesManagedAlg.CreateDecryptor(AesManagedAlg.Key, AesManagedAlg.IV);
// Create the streams used for decryption.
msDecrypt = new MemoryStream(cipherText);
csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
// Read the decrypted bytes from the decrypting stream
var decryptedData = new List<byte>();
var buffer = new byte[1];
while (true) {
var readedBytes = csDecrypt.Read(buffer, 0, buffer.Length);
if(readedBytes == 0) break;
decryptedData.Add(buffer[0]);
}
ret = decryptedData.ToArray();
Bearbeiten:
Es wird eng! RijndaelManaged managed funktioniert, aber es gibt mir ein Byte mehr an verschlüsselten Daten. Alle anderen Bytes sind die gleichen... Ich habe viel versucht, aber ich weiß nicht, wie ich das letzte Byte mit Bouncy Castle bekommen kann... Ohne dieses letzte Byte ist es nicht möglich, die Daten mit RijndaelManaged zu entschlüsseln...