Как подписать и зашифровать хеш с помощью c #, предоставив только хранилище ключей - PullRequest
2 голосов
/ 10 февраля 2012

Я использую хранилище ключей, которое было создано с использованием 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;
}

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

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

...