Verschlüsseln von Daten mit C# AesCryptoServiceProvider, verschlüsselt mit dem BouncyCastle AesFastEngine
Brauche ich zum entschlüsseln der Daten mit Standard-C# AesCryptoServiceProvider, die verschlüsselt wurde, mit Hüpfburg AesFastEngine auf die Java-Seite. (Zum entschlüsseln der Daten unter Verwendung der c# - Implementierung von Bounca Schloss ist kein problem)
Gibt es eine Möglichkeit, dies zu tun?
Ich nicht finden, die IV verwendet, in der Hüpfburg Umsetzung... gibt es eine?
Jede Hilfe wäre wirklich fein!
Markus
EDIT:
Wird der folgende code verwendet zur Initialisierung die AesFastEngine:
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, vielen Dank für deine Antwort, aber es funktioniert immer noch nicht...
Ich habe eine Beispiel-Lösung zum download hier.
Wenn Sie auf die beiden Schaltflächen erhalten Sie bereits einen anderen verschlüsselten array...???
Die Entschlüsselung des Array erzeugt mit Hüpfburg führt zu einer exception, die sagen, dass die verschlüsselten Daten hat eine ungültige Länge...
Hier ist der Code, den ich schrieb für die Entschlüsselung:
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();
Edit:
Immer in der Nähe! RijndaelManaged-managed funktioniert, aber es gibt mir ein byte der verschlüsselten Daten. Alle anderen bytes sind die gleichen... ich habe versucht, eine Menge, aber ich weiß nicht, wie man das Letzte byte mit Hüpfburg... Ohne das Letzte byte ist es nicht möglich, decrypte die Daten mit RijndaelManaged...
- Welcher Modus der AES-hast du benutzt? Nur zu sagen, Sie verwendet AesFastEngine ist nicht genug Informationen.
- Der folgende code verwendet zur Initialisierung die AesFastEngine: IBlockCipher coder = new AesFastEngine(); CfbBlockCipher cfbCipher = new CfbBlockCipher(coder, 8); IStreamCipher streamCipher = new StreamBlockCipher(cfbCipher); streamCipher.Init(true, keyParameter); streamCipher.ProcessBytes(Daten, 0, Daten.Länge, encodedMessageBytes, 0); Ist das genug information?
- Bitte, kopieren und einfügen von code. Nie geben Sie es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den IV, den Sie verwenden, die die Standard-IV, alle Nullen. Sie sollten in der Lage sein, dies zu tun .NET durch die Schaffung einer
AesManaged
Objekt, Einstellung des Modus zurCipherMode.CFB
und Einstellung der FeedbackSize zu 8. Dann verwenden Sie dieCreateEncryptor
Methode zum erstellen einerICryptoTransform
, und verwenden Sie diese wiederum erstellen einCryptoStream
. Dieses Beispiel helfen sollte, mit den letzten Schritten.EDIT:
Blick auf den neuen code, den Sie geschrieben, die zweite Zeile ist falsch. Sie müssen angeben, CFB Modus nicht CBC. Die zweite Zeile sollte
Auch, es sieht aus wie Sie zu entschlüsseln
readedBytes
bytes der Daten, sondern nur das hinzufügenbuffer[0]
zum Klartext und ignorieren den rest.EDIT 2:
Wie bereits erwähnt,
AesManaged
kann nicht verwendet werden, im CFB-Modus, aber RijndaelManaged werden kann. Beachten Sie, dass der AES-Algorithmus ist nur der Rijndael-Algorithmus eingeschränkt auf die 128-bit Blockgröße und entweder 128, 192 oder 256 bit Schlüssellänge. Sehen meine Antwort eine ähnliche Frage wie für ein Beispiel.