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

スタティック ライブラリをメイン プロジェクトにリンクするプロジェクトのビルド設定を変更する必要があります。次の手順を実行します:

1)「ビルド設定」タブをクリックします。

2)「その他のリンカー フラグ」を検索します。

3)「-all_load」フラグを追加します。

4) プロジェクトをビルドして実行します。

それは私にとってはうまくいきました。

于 2012-05-07T07:05:32.317 に答える
0

カテゴリ ヘッダー ファイルをインポートしましたか:

#import "NSData-AES.h"

AESDecryptWithPassphraseメソッドが定義されていると思います。それがなければ、アプリはメソッドについて知りません。

明確にするために、そのカテゴリによって追加された機能を使用するすべてのファイルにカテゴリ ヘッダー ファイルをインポートする必要があります。

于 2012-04-30T13:06:44.523 に答える