9

プロジェクトで公開/秘密キーを使用して、一部のデータを暗号化/復号化しています。

サーバーで公開鍵 (「public.pem」) をホストしています。

「public.pem」は次のようになります。

-----BEGIN PUBLIC KEY-----
.....
.....
-----END PUBLIC KEY-----

この公開鍵をダウンロードしてディスクに保存し、そのファイルへのファイル記述子を使用して OpenSSL の PEM_read_RSA_PUBKEY() を呼び出すクライアント側を作成しました。この操作はうまく機能し、その結果、暗号化の準備が整った RSA オブジェクトが作成されます。

公開鍵を毎回ディスクに書き込むことは避けたいと思います(すでにメモリにバッファがあるため)。

バッファをディスクに保存せずに同じ操作を行うにはどうすればよいですか? PEM_read_bio_RSAPublicKey() という関数があることに気付きましたが、BIO 構造の使用方法がわかりません。私は正しい道を進んでいますか?

したがって、実際の問題は次のようになります。ファイル記述子からではなく、メモリから直接 RSA オブジェクトへの公開/秘密キーを読み取るにはどうすればよいでしょうか。

4

3 に答える 3

23

あなたは正しい軌道に乗っています。経由で BIO バッファを使用して、すでにメモリにある PEM キーをラップする必要がありますBIO_new_mem_buf()。つまり、次のようなものです。

BIO *bufio;
RSA *rsa

bufio = BIO_new_mem_buf((void*)pem_key_buffer, pem_key_buffer_len);
PEM_read_bio_RSAPublicKey(bufio, &rsa, 0, NULL);

同じアプローチが RSA 秘密鍵にも (経由で) 有効ですPEM_read_bio_RSAPrivateKeyが、その場合は、パス フレーズに対応する必要があります。詳細については、 man ページを確認してください。

于 2012-08-09T17:35:02.897 に答える
4

SquareRootOfTwentyThree のメソッドは機能しません。これが私の解決策です。

BIO* bio = BIO_new(BIO_s_mem());
int len = BIO_write(bio, pem_key_buffer, pem_key_buffer_len);
EVP_PKEY* evp_key = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL);
RSA* rsa = EVP_PKEY_get1_RSA(evp_key);
于 2017-01-11T09:41:45.367 に答える