Versuchen Sie, Beispieldaten mit dem AES128-Algorithmus mit CBC- und PKCS7-Padding in Android und iOS zu verschlüsseln, aber die Ergebnisse sind anders :(
Android-Code:
%Vor%iOS-Code:
%Vor%In beiden Fällen versuche ich, den 1024-Byte-Puffer (zuvor gefüllt mit 0x01-Werten) mit einem vordefinierten Beispielschlüssel zu verschlüsseln.
Erste und letzte 6 Bytes des verschlüsselten Puffers in iOS:
%Vor%Erste und letzte 6 Bytes des verschlüsselten Puffers in Android:
%Vor%Irgendeine Idee?
Wenn ich Cipher.getInstance ("AES / CBC / PKCS7Padding") zu Cipher.getInstance ("AES") ersetze, dann werden zuerst mehrere Bytes des verschlüsselten Puffers gleich sein, aber vom 17. Byte ...
iOS:
%Vor%Android:
%Vor%Ich erinnere mich vage daran, dass ich ein ähnliches Problem mit der "Synchronisierung" der Verschlüsselung zwischen Android und iPhone hatte, und die Lösung war in der richtigen IV (Initialisierungsvektor) Verwendung. Es könnte also helfen, eine explizite IV-Nutzung in Android einzuschalten:
%Vor%Wenn Sie auf dem iPhone NULL als IV übergeben, kann intern ein Standard verwendet werden, der dem oben angegebenen entspricht.
In der Produktionsumgebung sollten Sie jedoch einen (kryptografisch sicheren Pseudo) zufälligen Initialisierungsvektor verwenden, der zusammen mit den Daten gespeichert wird. Dann ist es für alle Betriebsarten sicher. [1]
Der Android-Code verwendet explizit den CBC-Modus. Aber der iOS-Code gibt dies nicht an. Zumindest sehe ich es dort nicht.
Wenn Sie den CBC-Modus verwenden, müssen Sie auch den Initialisierungsvektor angeben:
%Vor%Sie sollten den gleichen Initialisierungsvektor für iOS verwenden und angeben, dass Sie den CBC-Modus verwenden.