サーバーと通信するクライアントがあり、通信は RSA と AES の組み合わせを使用して暗号化されています。私が生成した RSA キー ペアには、パスフレーズがありませんでした。そのため、安全にするために、最近パスフレーズを追加しました。すべてがサーバー側で正常に機能しますが、PHP によって生成された秘密鍵には暗号化情報が含まれていないため、クライアント側でロードできません。以下はphpコードです:
$passphrase = 'Hello World';
$config = array ("digest_alg" => "sha256","private_key_bits" => 2048,"private_key_type" => OPENSSL_KEYTYPE_RSA );
// Create the private and public key
$res = openssl_pkey_new ( $config );
/* Extract the private key from $res to $privKey */
openssl_pkey_export ( $res, $priv_key, $passphrase );
/* Extract the public key from $res to $pubKey */
$pub_key = openssl_pkey_get_details ( $res );
$pub_key = $pub_key["key"];
$pkey_pair = array ('priv_key' => $priv_key,'pub_key' => $pub_key );
var_dump($pkey_pair);
サーバー側で動作するため、http://phpfiddle.org/ で試すことができます。暗号化情報はありません。
クライアント側のコードは、RSA キーの生成にパスフレーズが使用されていない場合にのみ機能します。
try
{
Botan::AutoSeeded_RNG rng;
Botan::DataSource_Memory privKeyMem(privKey);
Botan::RSA_PrivateKey *rsaKey = dynamic_cast <Botan::RSA_PrivateKey*>
(Botan::PKCS8::load_key(privKeyMem, rng, passphrase.c_str()));
if(!rsaKey)
{
std::cout << "The loaded key is not a RSA key!\n";
return false;
}
....
.....
}
catch(...)
{
cout<<"Exception: could not load private key";
return false;
}