6

OpenSSL で Crypto++ API を使用して生成した RSA キーを使用する方法はありますか? 私が探しているのは、Crypto++ と OpenSSL の両方で簡単に開くことができる形式でキーを保存する方法です。

私はライセンス スキームを作成しており、Crypto++ API を使用して署名を検証し、ファイルを復号化したいと考えていますが、ライセンス ファイルを生成するには、Web インターフェイス (おそらく OpenSSL のみをサポートする PHP を使用) を使用して、生成および暗号化/暗号化を行いたいと考えています。ライセンスに署名します。

Crypto++ を使用して両方のアプリケーションを作成し、PHP から呼び出しますが、秘密鍵は暗号化された形式で保存されるため、パスワードをアプリケーションに渡す必要があり、コマンド ラインで渡すのは適切ではないようです。私へのアイデア。

4

3 に答える 3

5

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++ を使用する理由はわかりません。

于 2009-09-03T09:06:28.227 に答える