Probleme beim Verschlüsseln auf iOS und Entschlüsseln auf Node.js mit RAW RSA

9

Ich versuche, etwas auf der iOS-Seite zu verschlüsseln und es auf meinem node.js-Server zu entschlüsseln. Auf dem Server verwende ich die Bibliotheks-Schmiede. Ich konnte etwas verschlüsseln und alles auf node.js entschlüsseln, und das funktionierte. Ich verschlüsselte so: const encryptedPassword = publicKey.encrypt(password, 'RAW'); und entschlüsselte so: const password = privateKey.decrypt(encryptedPassword, 'RAW'); .

Nun, anstatt auf dem Server zu verschlüsseln, möchte ich auf meiner iOS-App verschlüsseln, aber auf die gleiche Weise entschlüsseln. Ich fand diese Bibliothek, schnell-rsautils. Ссылка Es hat diese Funktion namens encryptWithRSAKey , was ich lustig. Da es sich um eine unverschlüsselte Verschlüsselung handelt, habe ich versucht, das Padding SecPaddingNone weiterzuleiten. Leider funktioniert es nicht und ich kann nicht auf dem Server entschlüsseln. Die Fehlermeldung hat eine ungültige Länge und die Länge der base64-Daten scheint viel größer zu sein. Weiß jemand, wie ich dieses Problem beheben kann?

Hier ist mein iOS-Code:

%Vor%

Ich sende diese verschlüsselte base64-Zeichenfolge an den Server und versuche, den privaten Schlüssel zu entschlüsseln. Es funktioniert leider nicht.

    
hockeybro 15.08.2016, 19:17
quelle

2 Antworten

0

Dies ist nicht die Antwort auf Ihre genaue Frage, da ich diese spezifische Bibliothek nicht verwendet habe, aber ich habe ein wenig mit der Verschlüsselung in Javascript und node.js gespielt.

Ich konnte die eccjs-Bibliothek implementieren, die die Stanford Javascript Crypto Library (SJCL) mit asymmetrischer elliptischer Kurvenunterstützung ist.

Auf der Seite node.js:

%Vor%

Im Client:

%Vor%

Ich bin mir sicher, dass diese Lösung nicht perfekt sicher ist und ich habe sie nicht verwendet und stattdessen HTTPS implementiert. Dies sollte Ihnen jedoch die notwendigen Teile zur Verfügung stellen, um Ihre eigene asymmetrische Verschlüsselung durchzuführen, wenn dies Ihr ultimatives Ziel ist.

    
bruceceng 22.08.2016 23:15
quelle
0

SecPadding.None wurde aus Swift3 entfernt und der Code von Swift-RSAUtils wurde geändert, sodass ich Ihr Problem nicht reproduzieren kann. Ich kann jedoch Daten mit folgendem Code verschlüsseln und entschlüsseln:

%Vor%

Können Sie es mit der neuesten Version von Swift-RSAUtils in Ссылка noch einmal versuchen?

Bearbeiten: Ich habe festgestellt, dass Sie den Fehler "ungültige Nachrichtenlänge" erhalten haben. Beachten Sie, dass RSA eine große Datenmenge nicht auf einmal verschlüsseln kann. Es kann eine Nachricht bis zu key's size - 11 length verschlüsseln. Um diese Umgehung zu umgehen, teilt Swift-RSAUtils die langen Daten in kleine Stücke auf, verschlüsselt jedes Stück und führt sie alle zusammen. Auf der Serverseite sollten Sie also ähnlich verfahren: Teilen Sie die verschlüsselten Daten in Brocken von key's size , entschlüsseln Sie sie und fügen Sie sie zum Endergebnis zusammen.

    
btnguyen 18.09.2016 19:56
quelle

Tags und Links