我是Objective c的新手,并且正在ios(Objective c)上进行公钥固定,它与已经本地保存的Base64哈希值不匹配。但是它在Android环境中可以正常工作。我无法弄清楚出什么问题了。
我的代码返回哈希值:/ bGwd9wYf8ZpJagve4Y3kxrMfW2 + CYCQW6LjY5JmkwU = 保存的哈希:HWP97J5yrux7HtfsHUNFMxdetf3JmXkc55EBmMmJLpM
SecTrustRef serverTrust = challenge.protectionSpace.serverTrust;
SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, 0);
SecKeyRef keyRef= SecCertificateCopyPublicKey(certificate);
CFErrorRef error = NULL;
NSData* remoteCertificateData = (NSData*)CFBridgingRelease(SecKeyCopyExternalRepresentation(keyRef, &error));
NSData *keyData=remoteCertificateData;
uint8_t digest[CC_SHA256_DIGEST_LENGTH]={0};
CC_SHA256(keyData.bytes, keyData.length, digest);
NSData *data=[NSData dataWithBytes:digest length:CC_SHA256_DIGEST_LENGTH];
NSString *base64String = [data base64EncodedStringWithOptions:0];
if ([base64String isEqualToString:ExistinHash])
{
NSURLCredential *credential = [NSURLCredential credentialForTrust:serverTrust];
[[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];
completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
}
else
{
// In secure connection
}