当我从我的包中读取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;
}
答案 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的代码以及初始化它的位置?