2011-01-05 11 views
0

私はちょうど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; 

ですか?

答えて

0

i2d_PKCS7_fp()i2d_PKCS7_bio() DERファイルとバイナリ出力を比較します<openssl/pkcs7.h>からは、DER形式のPKCS7構造体をそれぞれファイルストリームまたはBIOに書き出します。

3

PEMファイルは、-----BEGIN PKCS7----- &ヘッダーとフッターの行を含むBase64でエンコードされたバージョンのDERファイルです。あなたはBase64では、それをデコードした後に見ることを期待するものだから、正確にわからない
...単なるテストとして

  1. パッケージPKCS#7 PEM形式の証明書:$ openssl crl2pkcs7 -nocrl -out outfile.pem.p7b -certfile server.crt -outform pem

  2. 同じ証明書をPKCS#7 DER形式でパッケージ化します。$ openssl crl2pkcs7 -nocrl -out outfile.der.p7b -certfile server.crt -outform der

  3. Base64デコーダで、PEMファイル(outfile.pem.p7b)の本体をデコードします。o Fあなたの選択&は...(outfile.der.p7b

は今、私はこれがあなたが望んでいたではない何かを求めたが、どのようなことがあり怖い

関連する問題