2009-08-31 11 views
6

OpenSSLでCrypto ++ APIで生成したRSA鍵を使用する方法はありますか?私が探しているのは、Crypto ++とOpenSSLの両方で容易に開くことができる形式で鍵を格納する方法です。OpenSSLでCrypto ++で生成されたRSA鍵を使用

私はCrypto ++ APIを使用して署名を検証し、ファイルを復号するが、Webインタフェース(おそらくOpenSSLのみをサポートするPHPを使用)を使用するライセンスファイルを生成することを望むだろう。ライセンスを生成して暗号化/署名します。

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

答えて

5

Crypto ++とOpenSSLの両方で、PKCS#8エンコードキーを処理できます。暗号化++では、鍵を生成して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のみを受け入れることができます。あなたは簡単にこのようなPEMにDERでエンコードされたバッファは を希望する場合は、また、PKCS#8は、C++での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; 
} 
?> 

、PHPに変換することができます。アルゴリズムは、PHPコードからわかるように非常に簡単です。

現在、OpenSSLは非常に普及しています。このような共通の暗号アプリケーションにCrypto ++を使用する理由はありません。

0

は、このリンクをお試しください: http://www.cryptopp.com/fom-serve/cache/62.html

あなたはPKCS#8を使用するとOpenSSLにキーを使用できるようにするにはPEM形式にDERから変換する必要がありますように見えます。あなたが両方のファイルに単一のファイルを使用できるかどうかはわかりません。

私はOpenSSLのみを使用していますので、Crypto ++でどのようなオプションがあるのか​​よくわかりません。私はこれらの用語をGoogleで検索することで上記のリンクを見つけました:Crypto ++ RSA OpenSSL。

DERは、OpenSSLのキーと証明書のバイナリ形式です。

PEMはOpenSSLのテキスト形式です。

+0

のOpenSSLで使用されるPEMのencodindにPKCS8 DERにしてから変換することができますおそらくいくつかのCrypto ++クラス、私はこの記事を見てきましたが、私はプログラム的な方法とに探していました。 – Vargas

+0

あなたがhttp://www.cryptopp.com/wiki/Key_Formatを読みましたか? –

1

私はOpenSSLのCrypto ++ APIで生成したRSA鍵を使用する方法はありますか?私が探しているのは、Crypto ++とOpenSSLの両方で容易に開くことができる形式で鍵を格納する方法です。

はい。 X.509およびPKCS#8エンコードされたキー(ZZコーダーの回答)に加えて、暗号化されたキーを含むPEMエンコードされたキーを使用することもできます。 OpenSSL interopのために、PEMでエンコードされたキーのサポートが2014年7月にプロジェクトに寄贈されました。

PEMでエンコードされたキーを使用するには、Crypto ++ PEM Packを取得し、ライブラリを再コンパイルする必要があります。 PEMパックは、Wey DaiがCrypto++ websiteに提供するCrypto ++ライブラリの一部ではありません。

$ cat rsa-pub.pem 
-----BEGIN PUBLIC KEY----- 
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCg7ovcljEjZCFOdLWENBKE6FSk 
Nke6OP79SMJABJw+JoEBpNddK6/v99IvA1qU76V0V4k8qLvhkVUtk9FArhhRsxeF 
1fd8UVqgsT8j0YCVFcJ/ZA372ogpXyvc5aK9mZEiKE5TIF8qnDFFZiMWPrad1buk 
hg+eFdo78QRLA5plEQIDAQAB 
-----END PUBLIC KEY----- 
$ 
$ cat rsa-enc-priv.pem 
-----BEGIN RSA PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: AES-128-CBC,E1A759E11CA515CE34B6E8CE5278C919 

slMx02TMblahTedEKsfS+qYYo4nZFaqI3PhCRYmE5zUa9clHm7yo36wIk3oo52OB 
f4AhOaJwiPQAbLe/kDHeP77iHd/4+hFNq/Haj6ahWRpXilLVOETLtefbzSGO8va3 
ORnwQpPThs2V0EetPU3LB3QcA/XRjWDzyNa7+LydOjKwbQdZnF/jND5NCkEkncNM 
iQJ1VWubN+Xs3Rx0CfLu5Chl1n7WnmCNMtLL/LtYeaR1SlRJa6BaF7hNHJJJ3+Jc 
8curCKlpobs+XnlDfjyqgTXolkiepn95TnT7KSqi3BqVEpq/5LKMnkDJg6nwUR7A 
w0jLNr1f8adWyBEj2Dp0D/jy8eDh65eHdJw4s8G5FZfBud1zWbvRQ3Ah70ISUKa3 
4q/6z2vervPgoc+rMVYDvRf/mqa4LMXYhuygsyx50OgPldCC2d0cVVFCg/ljdEzO 
UV5rSkK1Qczv8Nc1ZdY3fJA+qYIV8JqPPY+dJ2312R+myPi5Av0/69k8lZN5eIJk 
SkiiFQmabhc+o6z4RFA52a3lOud3eGM9L5nbFQGc5COzQVZ6y8t06tLIp9Y5zjA4 
KTgNncV5eq3Bau+cWXjP6pJRixFVfwIoy95mAur7B2P1iE4FXyZbvCovPL6vilT5 
kSqAo7Znu0RpTjE36tWY6tFt+GU7k8EBrjA3Qi+8xxqyYtr57Ns+H/j+hhJTN8L7 
IXoevwS81OPiB0Dmg6wLLXATG1+gCNXb8sd5U2eJhy4LOJA3y54CTgRnPXtM38CH 
K+JvnDstyUl9IGTsgUz51ZzyJNZGU9Ro3pt/a3Cs5IJumaygZ0LQ44WBw9m/vja9 
-----END RSA PRIVATE KEY----- 
$ 
$ cat ec-pub.pem 
-----BEGIN PUBLIC KEY----- 
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEVwXjdIb2yy25QbIO0XiIHpySXwSpIAcz 
v0Wdyq+fZ6BdJjs2jKvbs9pcRJn8yxlASWoz2R4NoHTZ2YokKsDfEg== 
-----END PUBLIC KEY----- 
$ 
$ cat ec-enc-priv.pem 
-----BEGIN EC PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: AES-128-CBC,F1DBC73E26DCD310888932C2762B3512 

nikex48SFvtNOIrOEDipwmxaghjn4jtrvwI3d1H/VNq9yp26WqFZxBJCUPFBFLjH 
auA+AHeUo3BVkNQPs0VO4FD5xR50mtc2tCJizzhyTTTypLc3lRkxmD1MpeZnWRy2 
70foVtNSvLL/QLJqNJGm/G9kl0xPN4zAfOq7Txoscnk= 
-----END EC PRIVATE KEY----- 

関連::他の有用な暗号++パッチについては、参照

// Load a RSA public key 
FileSource fs1("rsa-pub.pem", true); 
RSA::PublicKey k1; 
PEM_Load(fs1, k1); 

// Load a encrypted RSA private key 
FileSource fs2("rsa-enc-priv.pem", true); 
RSA::PrivateKey k2; 
PEM_Load(fs2, k2, "test", 4); 

// Save an EC public key 
DL_PublicKey_EC<ECP> k16 = ...; 
FileSink fs16("ec-pub-xxx.pem", true); 
PEM_Save(fs16, k16); 

// Save an encrypted EC private key 
DL_PrivateKey_EC<ECP> k18 = ...; 
FileSink fs18("ec-enc-priv-xxx.pem", true); 
PEM_Save(fs18, k18, "AES-128-CBC", "test", 4); 

キーがそうで、ディスクのように見える:あなたがインストールして、そのような単純な再コンパイルしたら

暗号++ wikiにCategory:Patchページ。

関連する問題