1

在我的应用程序中,我使用加密和解密。

在将字符串输入到本地数据库之前,我正在对其进行加密,在从数据库中获取数据之后,我正在对其进行解密并在我的应用程序中使用。它工作正常。我从 下面的链接中使用了加密/解密

加密时:

    NSString *myKey=@"any string more than 8 char";

    NSData *data ; 
    NSData *encryptedData; 
    NSString *encryptPassword,*encryptPasscode;

    // 1) Encrypt

    data = [password dataUsingEncoding: NSASCIIStringEncoding];
    encryptedData = [data AESEncryptWithPassphrase:myKey];

    // 2) Encode Base 64

    [Base64 initialize];
    encryptPassword = [Base64 encode:encryptedData];

解密时:

    NSData *decryptedData;
    NSData  *b64DecData;

    field1 = (char *) sqlite3_column_text(selectPasscodeStatement, 0);
    NSString *fieldStr1 = [[NSString alloc] initWithUTF8String: field1];

     // 3) Decode Base 64

      b64DecData = [Base64 decode:fieldStr1];

     // 4) Decrypt

       decryptedData = [b64DecData AESDecryptWithPassphrase:myKey];

       retrivedPasscode = [[NSString alloc] initWithData:decryptedData encoding:NSASCIIStringEncoding];

但我已经为同一个项目制作了 staticLibrary。我在另一个项目中使用那个 staticLibrary。当我运行该项目时,在加密时它给了我下面的错误

-[NSConcreteMutableData AESEncryptWithPassphrase:]:无法识别的选择器发送到实例 0x6a3fe40

4

2 回答 2

0

您是否导入了类别头文件:

#import "NSData-AES.h"

我相信有AESDecryptWithPassphrase定义的方法。没有它,应用程序不知道该方法。

只是为了澄清-您必须将类别头文件导入到要使用该类别添加的功能的每个文件中。

于 2012-04-30T13:06:44.523 回答
0

您需要在项目的构建设置中进行更改,它将静态库与主项目链接。跟着这些步骤:

1)单击构建设置选项卡。

2)搜索“其他链接器标志”。

3)添加'-all_load'标志。

4)构建并运行项目。

它对我来说很好。

于 2012-05-07T07:05:32.317 回答