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

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

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


person RRR    schedule 24.10.2011    source источник


Ответы (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);
}
person Iridium    schedule 24.10.2011
comment
спасибо, это кажется прекрасным решением, но у меня есть исходный закрытый ключ в файле pem, и когда я пытаюсь сравнить эти два ключа, я вижу, что они разные ... Я не знаю, как .NET framwork экспортирует blob , а вы иногда пользуетесь этим методом? вы можете мне объяснить, как это работает? - person RRR; 25.10.2011
comment
Большой двоичный объект CSP - это специфичное для Windows двоичное представление набора ключей, которое можно использовать с функцией ImportCspBlob для инициализации объекта шифрования. Это не будет PEM-представление ключа. Кажется, что ваш вопрос требует более подробной информации о том, чего именно вы пытаетесь достичь, если собираетесь получить полезный ответ. - person Iridium; 25.10.2011