AES-string-Verschlüsselung in Objective-C

Meine Objective-C App benötigt text - /string-Verschlüsselung (speziell ).

Ich weiß AES ist die sicherste Verschlüsselungsmethode verfügbar für den Verbraucher. Ich verstehe auch, wie konvertieren von Zeichenfolgen zu Daten und zurück... (nur Anfänger).

Viele Webseiten und Q/Als über die Verschlüsselung mit AES unklar sind, und keiner von Ihnen Stand, wie den code zu verwenden gegeben. Zum Beispiel, eine Webseite könnte sagen: "hier ist der code... hier ist, was es tut...", aber keine Erklärung dafür, wie es zu benutzen.

Ich habe festgestellt, das der code durch viel Forschung:

#import "<CommonCrypto/CommonCryptor.h>"
@implementation NSMutableData(AES)

Für die Verschlüsselung:

- (NSMutableData*) EncryptAES:(NSString *)key {
    char keyPtr[kCCKeySizeAES256+1];
    bzero( keyPtr, sizeof(keyPtr) );

    [key getCString: keyPtr maxLength: sizeof(keyPtr) encoding: NSUTF16StringEncoding];
    size_t numBytesEncrypted = 0;

    NSUInteger dataLength = [self length];

    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);

    NSMutableData *output = [[NSData alloc] init];

    CCCryptorStatus result = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256, NULL, [self mutableBytes], [self length], buffer, bufferSize, &numBytesEncrypted);

    output = [NSMutableData dataWithBytesNoCopy:buffer length:numBytesEncrypted];

    if(result == kCCSuccess) {
        return output;
    }
        return NULL;
    }

Zur Entschlüsselung:

- (NSMutableData*)DecryptAES: (NSString*)key andForData:(NSMutableData*)objEncryptedData {

    char  keyPtr[kCCKeySizeAES256+1];
    bzero( keyPtr, sizeof(keyPtr) );

    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF16StringEncoding];

    size_t numBytesEncrypted = 0;

    NSUInteger dataLength = [self length];

    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer_decrypt = malloc(bufferSize);    
    NSMutableData *output_decrypt = [[NSData alloc] init];
    CCCryptorStatus result = CCCrypt(kCCDecrypt , kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256, NULL, [self mutableBytes], [self length], buffer_decrypt, bufferSize, &numBytesEncrypted);

    output_decrypt = [NSMutableData dataWithBytesNoCopy:buffer_decrypt length:numBytesEncrypted];

    if(result == kCCSuccess) {
        return output_decrypt;
    } 
        return NULL;
    }
}

Dies ist der code, den ich gemacht, dass ich möchte, um zu entsprechen mit dem obigen code:

- (void)Encrypt {
    //Convert NSString to NSData so that it can be used to encrypt the Input
    NSString *Input  = [Inputbox text];
    NSData *InputData = [Input dataUsingEncoding:NSUTF8StringEncoding];
    //What to do here
}

Wie verwende ich diesen code, diese Methoden? Wohin geht es in meiner Umsetzung-Datei?

  • Hi @RazorSharp - migriert haben Sie hier Ihre Frage (Stack-Overflow). Fragen, auf immer code arbeiten jeglicher Art, kryptographische oder anderweitig, am besten beantwortet werden, hier gibt es einen großen pool von Leuten hier, die helfen können, aber wenn Sie wollen, zu Fragen, über die details der algorithmen, Polstern etc verwendet, dann crypto ist der Ort für Sie!
  • Ein wichtiger Aspekt beim design zu beachten ist, dass der Verschlüsselungs-Algorithmus ist nur ein Teil der Lösung. Key management ist sehr wichtig, und kann leicht die schwächste Stelle im system ist. Es gibt einige gute Bücher gibt, die auf diese Art der Sache (zB. Schneier), und viele Artikel über design. Einige der Forschung, jetzt kann sparen eine Menge Arbeit später.
  • github.com/Gurpartap/AESCrypt-ObjC für quick-AES-256-CBC cipher-und Base64-Kodierung basierende Verschlüsselung/Entschlüsselung. Sie können die gleiche Verschlüsselung und Codierung für die Verwendung an off-Gerät Verarbeitung (server, etc).
  • eventuell fehlende free(buffer) / free(buffer_decrypt), wenn Ergebnis != kCCSuccess?
Schreibe einen Kommentar