Crypto++ と OpenSSL の両方で、PKCS#8 でエンコードされたキーを処理できます。crypto++ では、次のようにキーを生成して PKCS#8 バッファに変換できます。
AutoSeededRandomPool rng;
RSAES_OAEP_SHA_Decryptor priv(rng, 2048);
string der;
StringSink der_sink(der);
priv.DEREncode(der_sink);
der_sink.MessageEnd();
// der.data() is the bytes you need
あとは、バイトを PHP に渡すだけです。ファイルに保存したり、メッセージで送信したりできます。
唯一の問題は、PHP の OpenSSL インターフェイスが PEM エンコードされた PKCS#8 のみを受け入れることです。PHP では、このように DER でエンコードされたバッファを PEM に簡単に変換できます。
<?php
function pkcs8_to_pem($der) {
static $BEGIN_MARKER = "-----BEGIN PRIVATE KEY-----";
static $END_MARKER = "-----END PRIVATE KEY-----";
$value = base64_encode($der);
$pem = $BEGIN_MARKER . "\n";
$pem .= chunk_split($value, 64, "\n");
$pem .= $END_MARKER . "\n";
return $pem;
}
?>
必要に応じて、PKCS#8 を C++ の PEM に変換することもできます。PHP コードからわかるように、アルゴリズムは非常に単純です。
現在、OpenSSL は非常に普及しています。このような一般的な暗号化アプリケーションに Crypto++ を使用する理由はわかりません。