Импортируйте частный BLOB-объект RSACryptoServiceProvider в CNGKey.Import

Из устаревшей программы:

bye [] rsaPrivateKeyExport = RSACryptoProvider.ExportCspBlob (true);

Эти ключи хранятся в файле.

В рамках устаревшего обновления мне нужно использовать ключи CNG RSA.

Итак, что-то вроде чтения старого блоба и последующего преобразования:

CngKey cngPrv = CngKey.Import (rsaPrvKeyExport, CngKeyBlobFormat.GenericPrivateBlob);

Но я не могу заставить это работать?

Как преобразовать старый тип BLOB-объектов в новый? Я использую только части старого блоба?

Длина ключа 2048.

1 ответ

GenericPrivateBlob это специфичный для CNG формат, он не означает "попробуй что-нибудь личное".

CNG может открывать ключевые блоки CAPI, используя форматы, указанные на https://docs.microsoft.com/en-us/windows/desktop/api/Bcrypt/nf-bcrypt-bcryptexportkey.

private static readonly CngKeyBlobFormat s_legacyRsaPrivateBlobFormat =
    new CngKeyBlobFormat("CAPIPRIVATEBLOB");

...

byte[] exported;

using (RSACryptoServiceProvider a = new RSACryptoServiceProvider(2048))
{
    exported = a.ExportCspBlob(true);
}

RSA b;

using (CngKey key = CngKey.Import(exported, s_legacyRsaPrivateBlob))
{
    b = new RSACng(key);
}

// This using is broken out here just to show that the constructed object can safely outlive
// the CngKey object that it was created from.
using (b)
{
    ...
}
Другие вопросы по тегам