2012-04-30 60 views
1

在我的應用程序中,我正在使用加密和解密。在staticLibrary中加密字符串時出錯

在將字符串輸入到本地數據庫之前,我正在對該數據庫進行加密,並在從數據庫中提取數據之後,我將其解密並在我的應用程序中使用。 它工作正常。我已經使用加密/解密從 link below

在加密的時間:

NSString *[email protected]"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同一個項目。我正在另一個項目中使用該靜態庫。當我運行該項目,以對其進行加密的時候給了我錯誤下面

- [NSConcreteMutableData AESEncryptWithPassphrase:]:無法識別的選擇發送到實例0x6a3fe40

回答

0

您需要在項目的構建設置中進行更改,該項目會將靜態庫鏈接到主項目。 請按照下列步驟操作:

1)單擊Build Settings選項卡。

2)搜索「其他鏈接器標誌」。

3)給它添加'-all_load'標誌。

4)構建並運行項目。

它適用於我。

0

你導入的類頭文件:

#import "NSData-AES.h" 

我相信有定義的AESDecryptWithPassphrase方法。沒有這個應用程序不知道這個方法。

只是爲了澄清 - 您必須將類別頭文件導入到您要使用該類別添加的功能的每個文件。

+0

- >是的,我在靜態庫和當前項目中都包含了#import「NSData-AES.h」。 我不知道它是如何調用[NSConcreteMutableData AESEncryptWithPassphrase:]函數 – umakanta