Как подписать и зашифровать хэш с помощью С#, если указано только хранилище ключей

Я использую хранилище ключей, которое было создано с помощью vc 6.0 и cryptoAPI. Хранилище ключей содержит все ключи обмена/подписи. Таким образом, я могу использовать открытые ключи просто отлично, чтобы шифровать данные с помощью RSA, но когда приходит время подписывать или расшифровывать данные, которые, как мне кажется, не могут найти, как дешифровать с помощью закрытого ключа.

Я видел множество сайтов, используя rsa = (RSACryptoServiceProvider) cert.PrivateKey;

но в моем хранилище ключей, когда я смотрю на сертификаты, все закрытые ключи не существуют.

//это то, как я настраиваю хранилище

public cryptTest(string storeName)
{
 store = new X509Store(storeName);
 this.storename = storename;
}

//это то, как я получаю сертификат из магазина

public X509Certificate2 getCertificate(string ID, certType ct)
{
 if (store == null)
 {
 return null;
 }
 store.Open(OpenFlags.ReadOnly);
 foreach (X509Certificate2 cert in store.Certificates)
 {
 if ((ct == certType.exchange && cert.Subject.Contains("Exchange")) ||
 (ct == certType.signature && cert.Subject.Contains("Signature")))
 {
 if (cert.Subject.Contains(ID)) // if the ID match
 {
 // todo check date etc ! is cert still valid if not delete etc. 
 store.Close();
 return cert;
 }
 }
 }
 store.Close();
 return null;
}

но затем в сертификатах они никогда не имеют закрытого ключа, так как я могу расшифровать или подписать с помощью сертификатов в хранилище ключей?

Бесконечно благодарен !

1 ответ

Я думаю, что шифрование EncryptTo/DecryptTo: Шифрование в.NET с CryptoAPI Certificate Stores должно содержать ответы на необходимые вам вопросы.

licensed under cc by-sa 3.0 with attribution.