从p12文件读取nsdata时提取标识

时间:2011-06-27 12:04:14

标签: objective-c ios openssl

当我从我的包中读取p12文件中的nsdata时,我可以提取身份。

NSData *PKCS12Data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle]     pathForResource:@"sample" ofType:@"p12"]];

但是当我将它存储为blob并尝试创建nsdata

PKCS12 *newp12;

using NSData *PKCS12Data = [[NSData alloc] initWithBytes:&p12ptr length:length];

它失败了....错误代码-26275 osstatus。两个场景nsdata显示相同的字节..任何编码问题? 请帮忙

我使用以下代码

提取身份
securityError = SecPKCS12Import((CFDataRef)inPKCS12Data,(CFDictionaryRef)optionsDictionary,&items);

    if (securityError == 0) { 
        CFDictionaryRef myIdentityAndTrust = CFArrayGetValueAtIndex (items, 0);
        const void *tempIdentity = NULL;
        tempIdentity = CFDictionaryGetValue (myIdentityAndTrust, kSecImportItemIdentity);
        *outIdentity = (SecIdentityRef)tempIdentity;
        const void *tempTrust = NULL;
        tempTrust = CFDictionaryGetValue (myIdentityAndTrust, kSecImportItemTrust);
        *outTrust = (SecTrustRef)tempTrust;
    } else 
    {
        NSLog(@"Failed with error code %d",(int)securityError);
        return NO;
    }

1 个答案:

答案 0 :(得分:1)

这是initWithBytes方法的文档:

  

initWithBytes:length:

     

返回通过添加a初始化的数据对象   给定的复制数据字节数   来自给定的缓冲区。

     
      
  • (id)initWithBytes:(const void *)bytes length:(NSUInteger)length
  •   

您的代码正在执行此操作:

NSData *PKCS12Data = [[NSData alloc] initWithBytes:&p12ptr length:length];

您可以看到,您将第一个参数传递给p12ptr。我假设这个变量不是一个字节?如果不是,那么你传递一个不正确的指向函数的指针,NSData试图用 length 来自内存空间中某个随机位置的字节数来初始化自己。

您能否发布您声明p12ptr的代码以及初始化它的位置?