我试图在我的iOS应用程序中实现RSA加密算法,但是当我尝试生成公钥和私钥对时,该函数向我返回errSecUnimplement错误。 我正在使用 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);
}
我已经修改了它,只为您完成解决方案。 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);
这不应该是:
const void* keys[] = {kSecAttrKeyType, kSecAttrKeySizeInBits};
int keySize = 1024;
const void *values[] = {kSecAttrKeyTypeRSA, &keySize};
即,键应该是字典的键和值的值,目前您在键中有一个(键,值)对,在值中有一个。
使用 kCFAllocatorSystemDefault
而不是 kCFAllocatorDefault
返回errSecSuccess
。