1

在 Mac OS X10.7 上编译我的一个源文件并收到这些弃用警告:

xxx_evp.c:135:5: 'EVP_MD_CTX_init' is deprecated
xxx_evp.c:137:9: 'EVP_DigestInit_ex' is deprecated
xxx_evp.c:177:9: 'EVP_DigestUpdate' is deprecated
xxx_evp.c:227:13: 'EVP_DigestFinal_ex' is deprecated
xxx_evp.c:235:5: 'EVP_MD_CTX_cleanup' is deprecated

我有另一组 OpenSSL 弃用警告,我在其中使用 MD5 函数,openssl/md5.h并且能够切换到 OpenSSL 调用的 CommonCrypto 版本,如下所示:

#if defined(__APPLE__)
#  define COMMON_DIGEST_FOR_OPENSSL
#  include <CommonCrypto/CommonDigest.h>
#else
#  include <openssl/md5.h>
#endif

但是我找不到任何关于与这些EVP_*调用相关的任何类型的 OpenSSL 兼容性的任何信息。对于这些 OpenSSLEVP_*调用,我可以做一些类似的事情来获得 OS X 10.7 上的“免费”兼容性支持吗?

4

2 回答 2

1

我查看了 CommonCrypto 头文件,/usr/include/CommonCrypto/唯一注意到任何 OpenSSL 兼容性的文件是CommonDigest.h. 如果在包含此头文件的代码之前定义#define符号COMMON_DIGEST_FOR_OPENSSL,则以下 OpenSSL 函数类将映射到它们的 CommonCrypto 等效项:

  • MD2_xxx,MD4_xxxMD5_xxx
  • SHA_xxx, SHA1_xxx, SHA224_xxx, SHA256_xxx,SHA384_xxxSHA512_xxx

OpenSSL EVP_xxx 函数似乎没有任何此类映射,至少作为 CommonCrypto 的一部分提供。

于 2012-08-30T00:33:44.183 回答
0

如果您使用任何 MD 或 SHA 哈希,您可以通过在包含 CommonDigest.h 之前定义 COMMON_DIGEST_FOR_OPENSSL 来获得 OpenSSL 兼容性。所以这一切都取决于你的 EVP_DigestInit_ex() 函数调用的第二个参数。例如,使用 SHA1 和 6 个“EVP_...”调用的 Mac App Store 签名代码可以替换为以下代码:

#define COMMON_DIGEST_FOR_OPENSSL
#include <CommonCrypto/CommonDigest.h>

    unsigned char digest[CC_SHA1_DIGEST_LENGTH];
    if (CC_SHA1([input bytes], [input length], digest)) {
        NSData *newHash = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];
    }
于 2012-10-18T14:31:11.043 回答