Ich habe gerade fertig mit dem Schreiben einiger OpenSSL/PKCS7 digitalen Signatur-Code und haben jetzt eine funktionierende PEM-codierte PKCS7-Datei. Nach einem kleinen Kampf muss ich das PEM in das DER-Format konvertieren. Das ist schwieriger als ich gehofft hatte.PEM-Konvertierung (PKCS7) zu DER - AKA Base64 C++ - Probleme
Es gibt einige bequeme Methoden in OpenSSL wie "PEM_write_bio_PKCS7_stream", um Ihr PKCS7-Objekt zu schreiben. Aber nach einigem googeln und Durchsuchen einiger Header-Dateien, kann ich anscheinend nichts finden, um ein PKCS7-Objekt zu nehmen und es in irgendetwas (BIO, FILE, char *) im DER-Format zu schreiben.
So fühlte ich mich geschlagen, wandte ich mich an den Header & Fußzeile in der PEM-Datei und Base64 entschlüsseln den Inhalt. Als Kontrolle habe ich das mit Java & BouncyCastle gemacht und genau das bekommen was ich will.
Hier ist mein Code dafür. Mit fast jedem Base64 Decoder ich versuche ich so etwas wie dieses drehen ...
MIIHmwYJKoZIhvcNAQcCoIIHjDCCB4gCAQExCzAJBgUrDgMCGgUAMIIBrQYJKoZI
hvcNAQc ... Lots More stuff
... +8L5ad45D/7ZGJWafaSw==
in ...
0\202\233 *\367\367
\240\202\2140\202\21010 +
Hier ist der Code ...
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;
Irgendwelche Gedanken?