iOS 9:SecItemCopyMatching 返回成功状态码,但键为 nil

Posted

技术标签:

【中文标题】iOS 9:SecItemCopyMatching 返回成功状态码,但键为 nil【英文标题】:iOS 9 : SecItemCopyMatching returns successful status code but key is nil 【发布时间】:2015-08-19 13:02:32 【问题描述】:

我正在尝试使用SecItemAdd 将私钥导入钥匙串,方法返回OSStatus 0,但是当我尝试使用SecItemCopyMatch 从钥匙串中检索该钥匙时,它返回零数据但OSStatus 为0 表示成功

请参考苹果开发者论坛link

【问题讨论】:

得到相同的结果,你现在有什么成功的解决方案吗? No..等待ios9公开发布。 如果您尽快需要它,您可以尝试使用此解决方案在您的代码中进行快速注入 - ***.com/questions/31549059/… 它对你有用吗? 【参考方案1】:

由于格式错误的公钥引用https://forums.developer.apple.com/thread/15129而发生错误

如果您使用基本编码规则库,这就是解决方案。

要修复您的公钥,您需要在模数数据之前插入零字节。 https://github.com/StCredZero/SCZ-BasicEncodingRules-iOS/issues/6#issuecomment-136601437

附:对我来说,修复很简单:

const char fixByte = 0;
NSMutableData * fixedModule = [NSMutableData dataWithBytes:&fixByte length:1];
[fixedModule appendData:modulusData];

【讨论】:

没有我的问题是导入私钥而不是公钥...我没有尝试导入公钥 你只是救了我的命,非常感谢,这个简单的解决方案怎么能成功......【参考方案2】:

谢谢!你是我的英雄!

就我而言。

之前

NSData *modBits = [[NSData alloc] initWithBase64EncodedString:mod options:NSDataBase64DecodingIgnoreUnknownCharacters];

之后

const char fixByte = 0;
NSMutableData * modBits = [NSMutableData dataWithBytes:&fixByte length:1];

NSData *tmpmodBits = [[NSData alloc] initWithBase64EncodedString:mod options:NSDataBase64DecodingIgnoreUnknownCharacters];

[modBits appendData:tmpmodBits];

【讨论】:

以上是关于iOS 9:SecItemCopyMatching 返回成功状态码,但键为 nil的主要内容,如果未能解决你的问题,请参考以下文章

没有密码回退的 Touch ID 的 SecItemCopyMatching

来自命令行的 xcodebuild - 权利问题 -SecItemCopyMatching:缺少权利

枚举我的 iOS 应用程序中的所有钥匙串项

SecItemAdd 和 SecItemCopyMatching 返回错误代码 -34018 (errSecMissingEntitlement)

SecItemCopyMatching 返回 nil 值而没有任何错误

SecItemCopyMatching 的 swift 2.0 钥匙串类型错误