iPhone上如何实现NSString的AES加密?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

有人能指出正确的方向来加密一个字符串,用加密的数据返回另一个字符串吗?(我一直在尝试使用256加密。)。我想要编写一个方法,它使用两个NSString实例,一个是要加密的消息,另一个是用来加密它的“密码”--我怀疑我必须用密码生成加密密钥,如果密码与加密数据一起提供,就可以反转。然后,该方法应返回从加密数据创建的NSString。

我也必须能够解密一个加密的字符串,但我希望这和kCCEncrypt/kCCDecrapt一样简单。

提问于
用户回答回答于

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSString *key = @"my password";
    NSString *secret = @"text to encrypt";

    NSData *plain = [secret dataUsingEncoding:NSUTF8StringEncoding];
    NSData *cipher = [plain AES256EncryptWithKey:key];
    printf("%s\n", [[cipher description] UTF8String]);

    plain = [cipher AES256DecryptWithKey:key];
    printf("%s\n", [[plain description] UTF8String]);
    printf("%s\n", [[[NSString alloc] initWithData:plain encoding:NSUTF8StringEncoding] UTF8String]);

    [pool drain];
    return 0;
}

考虑到这段代码,而且加密的数据并不总是能很好地转换成NSString,编写两种方法来包装所需的功能(正向和反向)可能会更方便...

- (NSData*) encryptString:(NSString*)plaintext withKey:(NSString*)key {
    return [[plaintext dataUsingEncoding:NSUTF8StringEncoding] AES256EncryptWithKey:key];
}

- (NSString*) decryptData:(NSData*)ciphertext withKey:(NSString*)key {
    return [[[NSString alloc] initWithData:[ciphertext AES256DecryptWithKey:key]
                                  encoding:NSUTF8StringEncoding] autorelease];
}

用户回答回答于

下面是一个示例,演示加密字符串的用法:

NSString *plainString = @"This string will be encrypted";
NSString *key = @"YourEncryptionKey"; // should be provided by a user

NSLog( @"Original String: %@", plainString );

NSString *encryptedString = [plainString AES256EncryptWithKey:key];
NSLog( @"Encrypted String: %@", encryptedString );

NSLog( @"Decrypted String: %@", [encryptedString AES256DecryptWithKey:key] );

在这里获得完整的源代码:

https://gist.github.com/838614

扫码关注云+社区