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)数値のintへのポインターではなく、CFNumberRefを使用する必要があります。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

これはすべきではありません:

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

つまり、キーはdictのキーであり、値は値である必要があります。現在、キーには1つの(key、value)ペアがあり、値には1つのペアがあります。

于 2012-05-15T12:01:26.073 に答える
0

returnkCFAllocatorSystemDefaultの代わりに使用します。kCFAllocatorDefaulterrSecSuccess

于 2012-06-15T20:43:40.487 に答える