2017-09-20 15 views

Antwort

0

Statt

RSACryptoServiceProvider csp = (RSACryptoServiceProvider)cert.PrivateKey; 
return csp.SignHash(hash, CryptoConfig.MapNameToOid("SHA256")); 

Verwendung

using (RSA privateKey = cert.GetRSAPrivateKey()) 
{ 
    return privateKey.SignHash(hash, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); 
} 

(Erfordert .NET 4.6+)

Das Problem ist Ihr RSACryptoServiceProvider Objekt die CAPI PROV_RSA_FULL Anbieter verwendet, die SHA-2 älter . SHA-2-Signaturen (vom Softwareanbieter) erfordern, dass der Schlüssel in PROV_RSA_AES ist, eine Tatsache, die hauptsächlich durch den Schlüsselerstellungs/PFX-Import gesteuert wird.

Es gibt eine Abhilfe Sie rebinding den Anbietertyp noch die soft-deprecated RSACryptoServiceProvider verwenden tun können, um, vor allem aber in Code wie folgt (in dem das Objekt nicht die Methode nicht verlassen) Sie cert.GetRSAPrivateKey() und vermeiden mit dem zurück Gießen RSA Objekt wechseln sollte jenseits der Algorithmus-Basisklasse.

Verwandte Themen