Die AES-Verschlüsselung führt zu unterschiedlichen Ergebnissen in iOS und Android

8

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%     
Tutankhamen 24.10.2012, 07:50
quelle

2 Antworten

8

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]

    
Vit Khudenko 24.10.2012, 08:51
quelle
0

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.

    
petrsyn 24.10.2012 08:55
quelle

Tags und Links