Лучший способ экспортировать закрытый ключ как байтовый массив

Я пишу приложение, которое должно получить закрытый ключ от пользователя, а затем отправить его в другое приложение как base64, я хочу, чтобы пользователь мог вставить X509Certificate2 с закрытым ключом. Теперь моя большая проблема заключается в том, как я могу преобразовать закрытый ключ из объекта AsimetricAlgorithm в массив Бейт, который содержит весь закрытый ключ? Я видел, что могу использовать openSSl - преобразовать весь сертификат в файл pem, а затем в файл RSA - и прочитать закрытый ключ, но я не хочу его использовать, потому что: я не хочу использовать файлы, библиотеку 3P, это не так безопасно и так далее... кто-нибудь знает о другом способе сделать это?

заранее спасибо!

1 ответ

AsymmetricAlgorithm объект, который вы получаете от PrivateKey собственность вашего X509Certificate2 на самом деле будет экземпляром одного из различных типов, полученных из AsymmetricAlgorithm, такие как RSACryptoServiceProvider, DSACryptoServiceProvider, так далее...

Вам нужно будет определить тип закрытого ключа, с которым вы имеете дело, и правильно его разыграть. После того, как вы разыграете, вы сможете позвонить ExportCspBlob(true) чтобы получить данные закрытого ключа.

Пример (при условии использования ключа RSA):

public string GetRSAPrivateKeyBase64(X509Certificate2 certificate)
{
    var privateKey = certificate.PrivateKey as RSACryptoServiceProvider;
    if (privateKey == null) throw new Exception("Not an RSA private key");
    // Export the CSP blob, including private key parameters 
    var cspBlob = privateKey.ExportCspBlob(true);
    return Convert.ToBase64String(cspBlob);
}
Другие вопросы по тегам