2012-02-10 3 views
2

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

Я видел множество сайтов, используя 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; 
} 

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

Спасибо, миллион!

ответ