これはopenssl rsa 4096ビット鍵を生成するために書いたc関数です。上記の関数によって生成された関数が適切なopenssl rsaキーを生成していない
bool rsa_gen_keys()
{
int ret = 0;
RSA *rsa = NULL;
BIGNUM *bignum = NULL;
BIO *bio_private = NULL;
BIO *bio_public = NULL;
int bits = 4096;
unsigned long k = RSA_F4;
bignum = BN_new();
ret = BN_set_word(bignum,k);
if(ret != 1){
goto cleanup;
}
rsa = RSA_new();
ret = RSA_generate_key_ex(rsa, bits, bignum, NULL);
if(ret != 1){
goto cleanup;
}
// write rsa private key to file
bio_private = BIO_new_file("private_new.pem", "w+");
ret = PEM_write_bio_RSAPrivateKey(bio_private, rsa, NULL, NULL, 0, NULL, NULL);
BIO_flush(bio_private);
// write rsa public key to file
bio_public = BIO_new_file("public_new.pem", "w+");
ret = PEM_write_bio_RSAPublicKey(bio_public, rsa);
if(ret != 1){
goto cleanup;
}
BIO_flush(bio_public);
cleanup:
BIO_free_all(bio_private);
BIO_free_all(bio_public);
RSA_free(rsa);
BN_free(bignum);
return ret;
}
鍵は何かが欠けているように見えます。私は、キーファイルを生成するためにopensslコマンドを使用している場合、ファイルは正常に動作、しかし
140286309791384:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:701:Expecting: PUBLIC KEY
:私は別のプログラムでpublic_new.pemファイルを使用しようとすると、私は次のエラーを取得します。
$openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:4096
私は、関数とコマンドラインから生成されたキーサイズが一致しないことに気付きました。これは手掛かりですが、これを修正するために私の機能を変更する必要がありますか?
-rw-rw-r-- 1 3272 Feb 6 09:19 private_key.pem
-rw-rw-r-- 1 800 Feb 6 09:20 public_key.pem
-rw-rw-r-- 1 3243 Feb 6 10:43 private_new.pem
-rw-rw-r-- 1 775 Feb 6 10:43 public_new.pem
はBTW、私は、2048ビットのキーを使用して上記を試して、私は同じ結果を得ると同じサイズの不一致
'c/C++ function' ==未定義の動作です。 :P –
どのようなフォームまたはエンコーディングが必要ですか?さまざまなエンコーディングを[OpenSSL RSAキーと.Net](http://stackoverflow.com/q/30475758/608639)で見ることができます。 – jww