如何升级替换Security框架中已废弃的SecDigestGetData方法
解决方案
SecDigestGetData属于旧版CSSM系列接口,自macOS 10.15、iOS 13起已被苹果从Security框架中移除,你可以使用苹果官方推荐的CommonCrypto框架的哈希计算接口替换原有逻辑,完全实现相同的证书摘要匹配功能。
第一步:导入必要头文件
在代码头部新增CommonCrypto头文件引入:
#include <CommonCrypto/CommonDigest.h>
第二步:替换原有代码段
原代码的核心作用是计算证书二进制数据的SHA1摘要,和已有的hashData做相等校验,替换后的代码如下:
uint8 candidate_sha1_hash[CC_SHA1_DIGEST_LENGTH]; // 直接调用CommonCrypto的SHA1接口计算证书数据的摘要 CC_SHA1(certData.Data, (CC_LONG)certData.Length, candidate_sha1_hash); // 对比摘要长度和内容 if ((hashData.Length == CC_SHA1_DIGEST_LENGTH) && (!memcmp(hashData.Data, candidate_sha1_hash, CC_SHA1_DIGEST_LENGTH))) { found = TRUE; break; }
补充说明
- 如果你后续需要切换为SHA256等其他哈希算法,只需要替换对应的接口即可:比如
CC_SHA256、CC_SHA256_DIGEST_LENGTH - 编译时确保项目已经链接Security.framework,CommonCrypto为系统内置框架无需额外链接配置
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

