2015-12-29 114 views
0

我已經有了一個以前被另一個人修復過的項目,我必須安裝OpenSSL才能做各種事情。 OpenSSL已經通過CocoaPods安裝,它工作得很好。問題是該項目有另一個名爲「Cipher」的庫,它正在使用509x證書對一些信息進行加密。 我沒有觸及代碼的那一部分,但它現在不再工作。 該庫包含4個文件:libcrypto.a,libssl.a,oaep.c和oaep.h. 通過CocoaPods鏈接的OpenSSL庫也包含libcrypto.a和libssl.a。同一個庫的兩個版本

這是現在已經不工作了代碼:

- (NSMutableString *)cipherWithBlock: (NSString *)string { 
    NSMutableString *cipherBlock = [NSMutableString string]; 
    static NSString* stringBlock = kLIT_EMPTY; 
    stringBlock = string; 
    NSData *crt = [[IWUserController sharedInstance] publicKey]; 
    unsigned char block [DIGEST_BUFFER_SIZE]; 
    const char* msg = [stringBlock cStringUsingEncoding:[NSString defaultCStringEncoding]]; 
    cipher((void*)[crt bytes], crt.length, msg, block); 
    for (int i = 0; i < DIGEST_BUFFER_SIZE; i++) 
     [cipherBlock appendFormat:@"%02X", block[i], nil]; 
    return cipherBlock; 
} 

這種方法實際上產生encripted字符串,但正在接收它的Web服務說,這是無效的。 我不知道該怎麼做。我唯一知道的是具有相同確切代碼但沒有OpenSSL的舊版本工作得很好。 有什麼想法?

+0

好的,因爲我得到更多的信息,我想更新我的問題了。事實證明,我現在在Xcode中有很多警告,說這兩個庫(Pod中的)中的所有文件都是爲更新的iOS版本(9.2)而不是鏈接的(7.0)構建的。 由於這些警告來自於我沒有碰到的課程,我現在認爲這門課正在導入新的圖書館,而不是舊的圖書館。 有什麼辦法可以在這個類中導入不同版本的庫? – Aleph72

+0

我終於解決了這個問題,但以一種非常「骯髒」的方式解決了問題:我已經將舊庫複製到吊艙中的新庫上。現在的問題是,我用新庫製作的數字標牌不再適用。在我看來,舊的庫被編譯爲32位,而新的編譯爲64位。我現在看到很多關於丟失整數精度的警告,這可能是問題嗎? – Aleph72

回答

0

爲了解決這個問題,我不得不使用OpenSSL框架的分叉版本,其中庫libcrypto.a和libssl.a已被降級到相同的修改過的版本,即原始版本使用的版本。 這種方式舊的加密方法和我添加的新的方法正在工作。

相關問題