7

を使用してキーのペアを作成しましたSecKeyGeneratePair。公開鍵をサーバーに渡したいのですが、どうすればよいかわかりません。

getPublicKeyBits私は(Appleから取った)関数を持っていCryptoExerciseますが、生のNSDataをどうするか本当にわかりません。関数は次のとおりです。

- (NSData *)getPublicKeyBits {
    OSStatus sanityCheck = noErr;
    NSData* publicKeyBits = nil;
    NSData* publicTag = [[NSData alloc] initWithBytes:publicKeyIdentifier length:sizeof(publicKeyIdentifier)];
    CFDataRef cfresult = NULL;


    NSMutableDictionary * queryPublicKey = [[NSMutableDictionary alloc] init];

    // Set the public key query dictionary.
    [queryPublicKey setObject:(__bridge id)kSecClassKey forKey:(__bridge id)kSecClass];
    [queryPublicKey setObject:publicTag forKey:(__bridge id)kSecAttrApplicationTag];
    [queryPublicKey setObject:(__bridge id)kSecAttrKeyTypeRSA forKey:(__bridge id)kSecAttrKeyType];
    [queryPublicKey setObject:[NSNumber numberWithBool:YES] forKey:(__bridge id)kSecReturnData];

    // Get the key bits.
    sanityCheck = SecItemCopyMatching((__bridge CFDictionaryRef)queryPublicKey, (CFTypeRef*)&cfresult); 


    if (sanityCheck != noErr)
    {
        publicKeyBits = nil;
    }
    else 
    {
        publicKeyBits = (__bridge_transfer NSData *)cfresult;
    }

    return publicKeyBits;
}

PEMこの生のバイトデータを取得して、暗号ライブラリが理解できるような形式または他の形式に変換するにはどうすればよいですか?base64でエンコードする必要がありますか?他にやらなければならないことはありますか?

それが役に立ったら、M2CryptoPythonで利用可能なライブラリで公開鍵を使用しようとしています。

4

2 に答える 2

2

おそらくhttp://www.openssl.org/docs/crypto/pem.html#を見たいと思うでしょう:

int PEM_write_PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
                                    unsigned char *kstr, int klen,
                                    pem_password_cb *cb, void *u);
于 2012-04-18T05:01:01.167 に答える
1

このページには、サーバーに送信できるようにデータを PEM 形式にパッケージ化するための優れたヒントとサンプル コードが含まれています。

http://blog.wingsofhermes.org/?p=42

ソースからコンパイルされ、静的にリンクされたopensslライブラリ全体は必要ありません。Base 64 キーを「-----BEGIN PUBLIC KEY-----」でラップして、標準の ruby​​ openssl クラスを使用する Rails アプリケーションで読み取って使用できるようにする、まさにこの手法を使用しています。

于 2012-12-09T13:24:41.630 に答える