Thông thường, người dùng sẽ có khóa riêng RSA được mã hóa PEM. Crypto ++ yêu cầu các phím này ở định dạng DER để tải. Tôi đã yêu cầu mọi người chuyển đổi thủ công tệp PEM của họ thành DER trước bằng cách sử dụng openssl như sau:Tải khóa RSA riêng được mã hóa PEM trong Crypto ++
openssl pkcs8 -in in_file.pem -out out_file.der -topk8 -nocrypt -outform der
Điều đó làm việc tốt, nhưng một số người không hiểu cách thực hiện cũng như họ không muốn. Vì vậy, tôi muốn tự động chuyển đổi tệp PEM thành tệp DER trong chương trình.
Đơn giản như tách "----- BEGIN CERTIFICATE -----" và "----- END CERTIFICATE -----" khỏi PEM hoặc là một số chuyển đổi khác được yêu cầu như tốt? Tôi đã được thông báo rằng giữa các điểm đánh dấu đó chỉ là DER được mã hóa b64. Dưới đây là một số mã đó chứng tỏ vấn đề:
// 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
}
Tôi muốn tránh hệ thống các cuộc gọi đến openssl xây dựng và làm việc chuyển đổi hoàn toàn trong Crypto ++ để người dùng có thể cung cấp một trong hai định dạng và những thứ "chỉ làm việc". Cảm ơn lời khuyên nào.
Bạn đang tìm kiếm bộ giải mã trong bộ nhớ hay cũng là một bộ giải mã trên đĩa? –
@OrgnlDave - bất kỳ ví dụ nào sử dụng Crypto ++ đều sẽ thực hiện. – 01100110
@ 01100110 - Crypto ++ hiện có hỗ trợ này dưới dạng tiện ích bổ sung. Xem [PEM Pack] (http://www.cryptopp.com/wiki/PEM_Pack) trên wiki Crypto ++. – jww