4

我试图在我的 iOS 应用程序中实现 RSA 加密算法,但是当我尝试生成公钥和私钥对时,该函数返回 errSecUnimplemented 错误。我目前正在使用 5.1 SDK 并以 5.1 为目标。

我可以不使用此功能,还是在尝试生成配对时设置了错误?

这是我的密钥生成代码:

SecKeyRef publicKey, privateKey;
CFDictionaryRef parameters;
const void* keys[] = {kSecAttrKeyType, kSecAttrKeyTypeRSA};
int keySize = 1024;
const void *values[] = {kSecAttrKeySizeInBits, &keySize};

parameters = CFDictionaryCreate(kCFAllocatorDefault, keys, values, 2, NULL, NULL);
OSStatus ret = SecKeyGeneratePair(parameters, &publicKey, &privateKey);
if ( ret == errSecSuccess )
{
    NSLog(@"Key success!");
}
else 
{
    NSLog(@"Key Failure! %li", ret);
}
4

3 回答 3

9

我已经对其进行了修改,以便为您完成解决方案。1)您需要使用 CFNumberRef 而不是指向 int 的指针作为数值。2)值必须是值,键必须是键-您在“键”和“值”中混合了键和值。

SInt32 iKeySize = 1024;
CFNumberRef keySize = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &iKeySize);
const void* values[] = { kSecAttrKeyTypeRSA, keySize };
const void* keys[] = { kSecAttrKeyType, kSecAttrKeySizeInBits };
CFDictionaryRef parameters = CFDictionaryCreate(kCFAllocatorDefault, keys, values, 2, NULL, NULL);

SecKeyRef publicKey, privateKey;
OSStatus ret = SecKeyGeneratePair(parameters, &publicKey, &privateKey);
if ( ret == errSecSuccess )
    NSLog(@"Key success!");
else 
    NSLog(@"Key Failure! %li", ret);
于 2012-05-11T23:31:03.027 回答
0

使用kCFAllocatorSystemDefault而不是kCFAllocatorDefaultreturn errSecSuccess

于 2012-06-15T20:43:40.487 回答
0

这不应该是:

const void* keys[] = {kSecAttrKeyType, kSecAttrKeySizeInBits};
int keySize = 1024;
const void *values[] = {kSecAttrKeyTypeRSA, &keySize};

即,键应该是字典的键,值是值,目前您在键中有一对 (key,value) 对,在值中有一对。

于 2012-05-15T12:01:26.073 回答