011*_*110 12 c++ encryption cryptography rsa crypto++
通常,用户将具有PEM编码的RSA私钥.Crypto ++要求这些密钥以DER格式加载.我一直要求人们事先使用openssl手动将他们的PEM文件转换为DER:
openssl pkcs8 -in in_file.pem -out out_file.der -topk8 -nocrypt -outform der
Run Code Online (Sandbox Code Playgroud)
这很好,但有些人不明白如何做到这一点,也不想做.所以我想在程序中自动将PEM文件转换为DER文件.
从PEM中剥离"----- BEGIN CERTIFICATE -----"和"----- END CERTIFICATE -----"还是一样简单,还是需要进行其他一些转换?我被告知在这些标记之间它只是b64编码的DER.以下是一些演示此问题的代码:
// load the private key
CryptoPP::RSA::PrivateKey PK;
CryptoPP::ByteQueue bytes;
try
{
CryptoPP::FileSource File( rsa.c_str(), true, new CryptoPP::Base64Decoder() );
File.TransferTo( bytes );
bytes.MessageEnd();
// This line Causes BERDecodeError when a PEM encoded file is used
PK.Load( bytes );
}
catch ( CryptoPP::BERDecodeErr )
{
// Convert PEM to DER and try to load the key again
}
Run Code Online (Sandbox Code Playgroud)
我想避免对openssl进行系统调用,并完全使用Crypto ++进行转换,以便用户可以提供格式和"正常工作".谢谢你的建议.
小智 7
是的,它是用Base64编码的DER流.但请注意,除了条带化BEGIN和END标记之外,如果是RSA密钥格式,还需要去除可能插入BEGIN标记和编码数据之间的任何标记.只有其余部分可以成功进行Base64解码.您似乎将完整的证书文件提供给解码器,并且需要修复.