Ich implementiere für iOS einen Entschlüsselungscode für eine Nachricht, die von einem Server stammt, über den ich keine Kontrolle habe. Eine frühere Implementierung auf einer anderen Plattform dokumentiert die Entschlüsselungsanforderungen AES256, gibt den Schlüssel und den Initialisierungsvektor an und sagt auch:
* Cipher Mode: CBC
* Padding: PKCS5Padding
Die Optionen für die Erstellung eines CCCryptor-Objekts umfassen nur kCCOptionPKCS7Padding und kCCOptionECBMode, wobei CBC die Standardeinstellung ist. Nach dem, was ich über Padding für die Verschlüsselung weiß, verstehe ich nicht, wie man beide verwenden kann; ich dachte, sie würden sich gegenseitig ausschließen. Bei der Erstellung eines CCCryptor für die Entschlüsselung habe ich versucht, sowohl eine 0 für Optionen als auch kCCOptionPKCS7Padding zu verwenden, aber beide geben mir nach der Entschlüsselung Kauderwelsch.
Ich habe den Dump dieser Entschlüsselung mit einem Dump des entschlüsselten Bytepuffers auf der anderen Plattform verglichen und bestätigt, dass sie wirklich unterschiedlich sind. Es gibt also etwas, das ich bei dieser Implementierung anders mache, das sich deutlich unterscheidet, ich weiß nur nicht, was... Und ich habe keine Ahnung, wie ich das in den Griff bekommen kann. Die Plattformen sind so unterschiedlich, dass es schwierig ist, viel von der vorherigen Implementierung abzuleiten, weil sie auf einer ganz anderen Plattform basiert. Und natürlich ist der Autor der früheren Implementierung inzwischen nicht mehr dabei.
Haben Sie eine Ahnung, was sonst noch inkompatibel sein könnte oder wie man das Problem beheben kann?