我想在OS X的钥匙串中存储一个对称密钥。我读了Apple DevDocs的资料,SecItemAdd
以便执行此操作。我还阅读了CryptoExercise,但没有针对我的任何解决方案。
但是,当我这样做时,我总是得到OSStatus errSecNoSuchAttr (-25303)
。
代码片段如下:
//Labels and app tags
NSString *label = @"My Testkey";
NSData * peerTag = [[NSData alloc] initWithBytes:(const void *)[label UTF8String] length:[label length]];
// Generating testkey
NSMutableData *key = [NSMutableData dataWithLength:kCCKeySizeAES128];
SecRandomCopyBytes(kSecRandomDefault, kCCKeySizeAES128, [key mutableBytes]);
// Setting dictionary for adding to keychain
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:(id)kSecClassKey forKey:(id)kSecClass];
[dict setObject:(id)kSecAttrKeyTypeAES forKey:(id)kSecAttrKeyType];
[dict setObject:kSecAttrKeyClassSymmetric forKey:(id)kSecAttrKeyClass];
[dict setObject:peerTag forKey:(id)kSecAttrApplicationTag];
[dict setObject:[NSNumber numberWithUnsignedInteger:kCCKeySizeAES128] forKey:(id)kSecAttrKeySizeInBits];
[dict setObject:key forKey:(id)kSecValueData];
// Adding to keychain
OSStatus osstatus = SecItemAdd((__bridge CFDictionaryRef)dict, NULL);
//Just give me a result (in this case a label in the app)
[[self statusField] setStringValue:[NSString stringWithFormat:@"Key: %@\nStatus: %@", [key base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength], SecCopyErrorMessageString(osstatus, NULL)]];
我做错了什么?任何帮助将不胜感激。谢谢。
我做错了什么?任何帮助将不胜感激。
似乎kSecAttrKeyClassSymmetric
不受支持。通过Google搜索Apple源代码(SecAttrKeyClassSymmetric网站:opensource.apple.com),您似乎从SecKey.c中获得了NULL :
case 2: // kSecAttrKeyClassSymmetric
secwarning("Unsupported symmetric key type: %@", ktype);
ref = NULL;
break;
...
基本编码并使用kSecClassGenericPassword
。或者,尝试将其填充到没有编码的钥匙串中。数组是一个数组。
请记住,我可能读错了那些资料。我没有阅读很多Apple源代码(我尽量避免使用Apple)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句