私はちょうどOpenSSL/PKCS7デジタル署名コードを書き終えて、作業中のPEMでエンコードされたPKCS7ファイルを作成しました。ですから少し戦いを終えて、そのPEMをDER形式に変換する必要があります。これは私が望むよりも厳しいことが証明されています。DER-AKA Base64 C++の問題へのPEM変換(PKCS7)
PKCS7オブジェクトを書き込むための "PEM_write_bio_PKCS7_stream"などのOpenSSLの便利な方法があります。しかし、いくつかの大規模なグーグル検索といくつかのヘッダーファイルのブラウジングの後、私はPKCS7オブジェクトを取得し、DER形式の何か(BIO、FILE、char *)に書き込むことができないようです。
そこで、私はPEMファイルのヘッダー&フッタを解析し、内容をデコードしてBase64を解析しました。チェックとして、私はJava & BouncyCastleでこれを行い、私が欲しいものを正確に得ました。
これは私のコードです。ほぼすべてのBase64デコーダで、私は
0\202\233 *\367\367
\240\202\2140\202\21010 +
...に
MIIHmwYJKoZIhvcNAQcCoIIHjDCCB4gCAQExCzAJBgUrDgMCGgUAMIIBrQYJKoZI
hvcNAQc ... Lots More stuff
... +8L5ad45D/7ZGJWafaSw==
...私はこのような何かを回してみてくださいここでそのコードは、任意の考えは...
string PKCS7String(starting_point);
string PEM_PKCS7_HEADER("-----BEGIN PKCS7-----\n");
string PEM_PKCS7_FOOTER("\n-----END PKCS7-----");
string::size_type pos = 0;
while ((pos = PKCS7String.find(PEM_PKCS7_HEADER, pos)) != string::npos) {
PKCS7String.replace(pos, PEM_PKCS7_HEADER.length(), "");
pos++;
}
pos = 0;
while ((pos = PKCS7String.find(PEM_PKCS7_FOOTER, pos)) != string::npos) {
PKCS7String.replace(pos, PEM_PKCS7_FOOTER.length(), "");
pos++;
}
//Take your pick of decoders, they all do the same thing. Here's just the most recent
auto_ptr<uint8_t> decoded = decode(PKCS7String);
uint8_t* array = decoded.get();
cout << array << endl;
ですか?