Sie müssen kompatibel sein, rein Algorithmisch gesehen. ABER! alles was ausserhalb des reinen AES Algos. liegt ist Definitionssache, dh. zb. das Protokoll wie man den übergebenen Schlüssel in einen sicheren Sessionkey umwandelt kann sehr unterschiedlich sein. Das gleiche gilt für die IVs=Init Vektoren.
Du solltest folgendes berücksichtigen:
1.) nur Cipher Modis cmCBC, cmECB, cmOFB etc. pp. verwenden.
2.) NIEMALS Cipher Mode cmCTS verwenden da das eine Eigenentwicklung meinerseits ist. Sie basiert zwar auf dem Standard Modus CBC ist aber kein Standard selber.
3.) den Cipher mit .Init() initialisieren und nicht mit .InitKey(). Die Methode Init() benutzt den Schlüssel so wie er ist. Die Methode .initKey() wanelt per Hashfunktion den Key vorher in einen Sessionkey um. Dieses Umwandlung ist zwar standardmäßig empfohlene Praxis, aber jede Library kocht da ihr eigenes Süppchen WIE sie es umwandelt.
4.) Das Padding der Nachricht auf ein Mehrfaches der Blockgröße.
DEC benutzt Cipher Text Stealing im CBC Modus. Die Art&Weise wie nun dieses durchgeführt wird ist noch nicht standardisiert. Nur die neuesten Cipher Modis habe das auch in ihren Standards berücksichtigt. Am besten ist es erstmal mit Nachrichten der Länge Cipher.BlockSize * x austesten. Wenn beide Resultate identisch sind dann mit ungepaddeten Daten nochmal probieren. Meistens unterscheidet sich dann der letzte Block der verschlüsselten Nachricht, je nachdem welches Paddingschemata verwendet wurde.
5.) praktisch Testen! Um einen solchen Test kommst du niemals drumherum.
Gruß Hagen