2017-09-20 23 views
0

データに署名しようとすると、常に無効なアルゴリズムが指定されています。ここでWindows server 2012 "無効なアルゴリズムが指定されています。"

enter image description here

は私の証明書の詳細です:私は、次のコードを使用しています。

enter image description here

、おかげで私を助けてください。

+0

スクリーンショットは、CertUIのようなものに適しています。しかし、コードではありません。 – bartonjs

答えて

0

代わりの

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

使用

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

(.NET 4.6+が必要)

問題は、あなたのRSACryptoServiceProviderオブジェクトはSHA-2に先行CAPI PROV_RSA_FULLプロバイダを使用してあります。 SHA-2シグネチャ(ソフトウェアプロバイダから)は、鍵がPROV_RSA_AESであることを要求します。これは、主に鍵の作成/ PFXインポートによって制御されます。

ありますが、まだsoft-deprecated RSACryptoServiceProviderを使用するために、プロバイダのタイプを再バインドするために行うことができます回避策はありますが、特に(オブジェクトメソッドを残していない)、このようなコードで、あなたがcert.GetRSAPrivateKey()の使用に切り替えると返されたRSAオブジェクトをキャストすることは避けてくださいアルゴリズムベースクラスを超えています。

関連する問題