Лучший способ экспортировать закрытый ключ как байтовый массив
Я пишу приложение, которое должно получить закрытый ключ от пользователя, а затем отправить его в другое приложение как 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);
}