【发布时间】: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