Problem mit CCCrypt (CommonCrypt) in Swift

7

Ich portiere eine funktionierende Objective-C Kategorie (NSData + AESCrypt.m) nach Swift und ich habe ein Problem mit den Zeigern gefunden. Der Code für den Verschlüsselungsteil in Swift wird korrekt kompiliert, generiert jedoch einen Laufzeitfehler EXEC_BAD_ACCES.

Der Code, den ich bisher habe (ich habe versucht, den Code so weit wie möglich zu analysieren):

%Vor%

Das encryptedData-Objekt zeigt folgende Informationen an:

%Vor%

Aber der encryptedString zeigt 0x0000000000 im Debugger und versucht println() zu generieren, erzeugt er den Fehler EXEC_BAD_ACCESS

Irgendeine Idee, was fehlt?

Rgds ....

    
eharo2 09.09.2014, 21:54
quelle

2 Antworten

16
  

Swift 2.0

Hier ist ein Beispiel Wenn dies nicht genau das ist, was benötigt wird, sollten die Methoden ein gutes Beispiel sein Hinweis: Die Schlüsselzeichenfolge wird in Daten

konvertiert

Hinzufügen von Security.framework zum Projekt
Fügen Sie dem überbrückenden Header #import <CommonCrypto/CommonCryptor.h> hinzu.

%Vor%

Ausgabe:

%Vor% %Vor%
  

Schnell 3

Der iv ist den verschlüsselten Daten vorangestellt

aesCBC128Encrypt erstellt eine zufällige IV und setzt den verschlüsselten Code voraus.
aesCBC128Decrypt verwendet die vorangestellte IV während der Entschlüsselung.

Eingaben sind Daten und Schlüssel sind Datenobjekte. Wenn ein codiertes Formular wie Base64 bei Bedarf in und / oder von der aufrufenden Methode konvertiert wird.

Der Schlüssel sollte genau 128-Bit (16-Byte), 192-Bit (24-Byte) oder 256-Bit (32-Byte) lang sein. Wenn eine andere Schlüsselgröße verwendet wird, wird ein Fehler ausgelöst.

PKCS # 7 Padding ist standardmäßig festgelegt.

Dieses Beispiel erfordert Common Crypto
Es ist notwendig, einen Bridging-Header zum Projekt zu haben:
#import <CommonCrypto/CommonCrypto.h>
    Fügen Sie Security.framework dem Projekt hinzu.

Dies ist ein Beispiel, kein Produktionscode.

%Vor%

Beispielverwendung:

%Vor%

Beispielausgabe:

%Vor% %Vor%
  

Anmerkungen:

Ein typisches Problem mit CBC-Modus-Beispielcode besteht darin, dass die Erstellung und Freigabe der zufälligen IV für den Benutzer erfolgt. In diesem Beispiel wird die IV erstellt, die verschlüsselten Daten vorangestellt und während der Entschlüsselung das Präfix IV verwendet. Dies befreit den gelegentlichen Benutzer von den Details, die für den CBC-Modus erforderlich sind.

Aus Sicherheitsgründen sollten die verschlüsselten Daten auch eine Authentifizierung haben, dieser Beispielcode bietet das nicht, um klein zu sein und eine bessere Interoperabilität für andere Plattformen zu ermöglichen.

Es fehlt auch die Schlüsselableitung des Schlüssels von einem Passwort, es wird vorgeschlagen, dass PBKDF2 Textpasswörter sind als Schlüsselmaterial verwendet.

Für einen robusten produktionsbereiten Multi-Plattform-Verschlüsselungscode siehe RNCryptor .

    
zaph 10.09.2014, 01:10
quelle
9

Swift 2.0 Verschlüsselung und Entschlüsselung. Habe gerade die obige Antwort aktualisiert, um Swift 2.0 zu unterstützen.

%Vor%     
karthik Prabhu 11.08.2015 06:04
quelle