在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弃用警告,其中我使用openssl/md5.h
的MD5函数,并且能够切换到OpenSSL调用的CommonCrypto版本,如下所示:
#if defined(__APPLE__)
# define COMMON_DIGEST_FOR_OPENSSL
# include <CommonCrypto/CommonDigest.h>
#else
# include <openssl/md5.h>
#endif
但我无法发现与这些EVP_*
调用相关的任何类型的OpenSSL兼容性。是否有类似的东西可以在OS X 10.7上为这些OpenSSL EVP_*
调用获得“免费”兼容性支持?
答案 0 :(得分:1)
我查看了/usr/include/CommonCrypto/
中的CommonCrypto头文件,唯一注意到任何OpenSSL兼容性的文件是CommonDigest.h
。如果在此头文件包含在您的代码之前定义了#define
符号COMMON_DIGEST_FOR_OPENSSL
,则以下类的OpenSSL函数将映射到其CommonCrypto等效项:
MD2_xxx
,MD4_xxx
和MD5_xxx
SHA_xxx
,SHA1_xxx
,SHA224_xxx
,SHA256_xxx
,SHA384_xxx
和SHA512_xxx
OpenSSL EVP_xxx函数似乎没有任何此类映射,至少作为CommonCrypto的一部分提供。
答案 1 :(得分: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];
}