如何在没有密码对话框的情况下从SecKeyRef获取属性?

时间:2018-04-05 17:25:11

标签: macos

我需要获取有关私人kSecAttrKeyTypekSecAttrApplicationLabelkSecAttrCanSignkSecAttrCanDecryptkSecAttrCanUnwrapkSecAttrIsExtractable

的信息

但我在SecKeyCopyAttributes上使用

获得了系统密码对话框

enter image description here

有没有办法在没有系统密码对话框的情况下获取此公开信息?

我试图从公钥中获取一些公开信息。但我在SecKeyCopyPublicKey

上获得了相同的系统对话框

1 个答案:

答案 0 :(得分:0)

可以通过kSecReturnAttributes函数

SecItemCopyMatching参数进行操作

这是C ++示例,它返回keychain中每个键的属性

CFMutableDictionaryRef matchAttr = CFDictionaryCreateMutable(kCFAllocatorDefault,
                                                             0,
                                                             &kCFTypeDictionaryKeyCallBacks,
                                                             &kCFTypeDictionaryValueCallBacks);
CFDictionaryAddValue(matchAttr, kSecClass, kSecClassKey);
CFDictionaryAddValue(matchAttr, kSecMatchLimit, kSecMatchLimitAll);
CFDictionaryAddValue(matchAttr, kSecReturnAttributes, kCFBooleanTrue);

CFArrayRef result;
OSStatus status = SecItemCopyMatching(matchAttr, (CFTypeRef*)&result);
if (status == kCCSuccess) {
    CFIndex arrayCount = CFArrayGetCount(result);

    for (CFIndex index = 0; index < arrayCount; index++) {
        CFShow(CFArrayGetValueAtIndex(result, index));
    }
}