首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS SecKeyRef来自NSString

iOS SecKeyRef来自NSString
EN

Stack Overflow用户
提问于 2014-09-30 11:40:35
回答 1查看 3.9K关注 0票数 5

我需要使用公钥将用户密码加密为base64字符串。

公钥是NSString。

就像这样:

"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgWO7p1AvCaHUeaM6rSczBBAqt mKObHxGW3VgTom2zGwswGj9t/Hr7NdJQCGAiq0ijcW9/oYnM/JobbsyEijHKqIQm OVMsV4JRoG68PEDszH/ebkqWhzu7vG9IQ6VYIkaKHqk7cg+mQ1qFDoigOooFJ2Pf Uzbmg+Z/DuYDuwg+bwIDAQBC“

我怎样用它做SecKeyRef呢?

我找到了一个教程这里

但我无法使它工作,因为SecCertificateCreateWithData总是返回零。

这是我的密码

代码语言:javascript
复制
NSData* data = [NSString base64DataFromString:PUBLIC_KEY];
SecCertificateRef   cert    = NULL;
SecPolicyRef        policy  = NULL;

cert = SecCertificateCreateWithData(kCFAllocatorDefault, (__bridge CFDataRef)(data));
policy = SecPolicyCreateBasicX509();

OSStatus        status      = noErr;
SecKeyRef       *publicKey  = NULL;
SecTrustRef     trust       = NULL;
SecTrustResultType  trustType   = kSecTrustResultInvalid;

if (cert != NULL){
    SecCertificateRef   certArray[1] = {cert};
    CFArrayRef certs = CFArrayCreate(kCFAllocatorDefault, (void *)certArray, 1, NULL);
    status = SecTrustCreateWithCertificates(certs, policy, &trust);

    if (status == errSecSuccess){
        status = SecTrustEvaluate(trust, &trustType);

        // Evaulate the trust.
        switch (trustType) {
            case kSecTrustResultInvalid:
            case kSecTrustResultConfirm:
            case kSecTrustResultDeny:
            case kSecTrustResultUnspecified:
            case kSecTrustResultFatalTrustFailure:
            case kSecTrustResultOtherError:
                break;
            case kSecTrustResultRecoverableTrustFailure:
                *publicKey = SecTrustCopyPublicKey(trust);
                break;
            case kSecTrustResultProceed:
                *publicKey = SecTrustCopyPublicKey(trust);
                break;
        }

    }
} else {
    NSLog(@"CERT == NULL");
}

if (publicKey == NULL) {
    NSLog(@"PUBLIC KEY == NULL");
}

SecKeyRef总是为零,因为证书也是零。请帮帮我。

EN

回答 1

Stack Overflow用户

发布于 2015-04-26 21:31:22

你不能只传递关键数据。您必须通过一个由您的密钥签名的证书,才能从证书中提取密钥。参见这个答案 to a 相似问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26119952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档