【问题标题】:Two versions of the same libraries相同库的两个版本
【发布时间】:2016-04-03 04:04:18
【问题描述】:

我得到了一个以前由另一个人维​​护的项目,我必须安装 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;
}

这个方法实际上产生了一个加密字符串,但是接收它的网络服务说它是无效的。 我不知道该怎么做。我唯一知道的是,具有相同代码但没有 OpenSSL 的旧版本可以正常工作。 有什么想法吗?

【问题讨论】:

  • 好的,我正在获取更多信息,我也想更新我的问题。事实证明,我现在在 Xcode 中有很多警告说这两个库中的所有文件(Pod 中的那些)都是为更新的 iOS 版本(9.2)而不是链接(7.0)构建的。由于这些警告来自我没有接触过的类,我现在认为这个类正在导入新库而不是旧的工作库。有什么方法可以在这个类中导入不同版本的库吗?
  • 我终于以一种非常“肮脏”的方式解决了这个问题:我已经将旧库复制到 pod 中的新库上。现在的问题是我用新图书馆制作的数字标牌不再起作用了。在我看来,旧库以 32 位编译,而新库以 64 位编译。我现在看到很多关于丢失整数精度的警告,这可能是问题吗?

标签: ios objective-c encryption openssl


【解决方案1】:

为了解决这个问题,我不得不使用 OpenSSL 框架的分叉版本,其中库 libcrypto.a 和 libssl.a 已降级为原始项目使用的相同的修改版本。 这样,旧的加密方法和我添加的新方法都可以正常工作。

【讨论】:

    猜你喜欢
    • 2014-12-11
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多