NSData-AES Class Encryption/Decryption in Cocoa

做~自己de王妃 提交于 2019-11-26 10:29:52

问题


I am attempting to encrypt/decrypt a plain text file in my text editor. encrypting seems to work fine, but the decrypting does not work, the text comes up encrypted. I am certain i\'ve decrypted the text using the word i encrypted it with - could someone look through the snippet below and help me out?

Thanks :)

Encrypting:

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];

Decrypting:

    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];

回答1:


Why not use the built-in encryption algorithms? Here's an NSData+AES i wrote which uses CCCrypt with a 256it key for AES256 encryption.

You can use it like:

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

and decrypt it with:

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

DISCLAIMER: There no guarantee my NSData+AES is bug-free :) It's fairly new. I welcome code reviews.



来源:https://stackoverflow.com/questions/2579453/nsdata-aes-class-encryption-decryption-in-cocoa

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!