2010-04-05 2 views
9

Sto tentando di cifrare/decifrare un file di testo nel mio editor di testo. la crittografia sembra funzionare bene, ma la decrittografia non funziona, il testo viene crittografato. Sono sicuro di aver decodificato il testo usando la parola con cui l'ho crittografato - qualcuno potrebbe guardare attraverso lo snippet qui sotto e darmi una mano?NSData-AES Classe di crittografia/decrittografia in Cocoa

Grazie :)

Crittografia:

NSAlert *alert = [NSAlert alertWithMessageText:@"Encryption" 
            defaultButton:@"Set" 
            alternateButton:@"Cancel" 
             otherButton:nil 
         informativeTextWithFormat:@"Please enter a password to encrypt your file with:"]; 
    [alert setIcon:[NSImage imageNamed:@"License.png"]]; 
    NSSecureTextField *input = [[NSSecureTextField alloc] initWithFrame:NSMakeRect(0, 0, 300, 24)]; 
    [alert setAccessoryView:input]; 
    NSInteger button = [alert runModal]; 
    if (button == NSAlertDefaultReturn) { 
    [[NSUserDefaults standardUserDefaults] setObject:[input stringValue] forKey:@"password"]; 
    NSData *data; 
    [self setString:[textView textStorage]]; 
    NSMutableDictionary *dict = [NSDictionary dictionaryWithObject:NSPlainTextDocumentType 
                  forKey:NSDocumentTypeDocumentAttribute]; 
    [textView breakUndoCoalescing]; 
    data = [[self string] dataFromRange:NSMakeRange(0, [[self string] length]) 
        documentAttributes:dict error:outError]; 
    NSData*encrypt = [data AESEncryptWithPassphrase:[input stringValue]]; 
    [encrypt writeToFile:[absoluteURL path] atomically:YES]; 

decrittografia:

NSAlert *alert = [NSAlert alertWithMessageText:@"Decryption" 
            defaultButton:@"Open" 
            alternateButton:@"Cancel" 
             otherButton:nil 
         informativeTextWithFormat:@"This file has been protected with a password.To view its contents,enter the password below:"]; 
    [alert setIcon:[NSImage imageNamed:@"License.png"]]; 
    NSSecureTextField *input = [[NSSecureTextField alloc] initWithFrame:NSMakeRect(0, 0, 300, 24)]; 
    [alert setAccessoryView:input]; 
    NSInteger button = [alert runModal]; 
    if (button == NSAlertDefaultReturn) { 
    NSLog(@"Entered Password - attempting to decrypt.");  
    NSMutableDictionary *dict = [NSDictionary dictionaryWithObject:NSPlainTextDocumentType 
                   forKey:NSDocumentTypeDocumentOption]; 
    NSData*decrypted = [[NSData dataWithContentsOfFile:[self fileName]] AESDecryptWithPassphrase:[input stringValue]]; 
    mString = [[NSAttributedString alloc] 
       initWithData:decrypted options:dict documentAttributes:NULL 
       error:outError]; 
+0

dove vengono le '-AESEncryptWithPassphrase:' e '-AESDecryptWithPassphrase:' metodi vengono? –

+0

Ciao Rob, ho ottenuto la classe NSData + AES (che include questi metodi) da qui: http: //iphonedevelopment.blogspot.com/2009/02/strong-encryption-for-cocoa-cocoa-touch.html – Pripyat

+0

la questione sembra essersi risolto dopo aver modificato il valore delle chiavi a 128. – Pripyat

risposta

20

Perché non utilizzare il built-in algoritmi di crittografia? Ecco un NSData+AES ho scritto che utilizza CCCrypt con una chiave di crittografia AES256 256it per.

Si può usare come:

NSData *data = [[NSData dataWithContentsOfFile:@"/etc/passwd"] 
          encryptWithString:@"mykey"]; 

e decifrare con:

NSData *file = [data decryptWithString:@"mykey"]; 

NOTA BENE: Non ci sono garanzie mia NSData+AES è privo di bug :) E 'abbastanza nuovo. Accolgo con favore le recensioni sul codice.

+0

grazie. Ho codificato qualcosa di simile un po 'indietro, anche in codice uno che lavora con NSMutableDictionary - impressionante per file di licenza di proprietà;) – Pripyat

+0

ci sono i sali nella crittografia tua @nicerobot previsto? –

+0

@TwoDumpling Esiste un supporto per un vettore iniziale fornito da CCCrypt, ma sale viene semplicemente aggiunto al testo da crittografare. – nicerobot