“System.Security.Cryptography.CryptographicException”类型的例外:keyset不存在

时间:2015-06-09 05:20:12

标签: c# encryption cryptography rsa x509certificate

此链接 System.Security.Cryptography.CryptographicException: keyset does not exist

所做的所有步骤

但它无法纠正错误。

static public string Build64(string idOrder, double Amount) {

        string StrForSign = KKBRequestStr.Replace("%ORDER%", idOrder).Replace("%AMOUNT%", string.Format("{0:f}", Amount).Replace(",", "."));
        X509Certificate2 KKbCert = new X509Certificate2(KKBpfxFile, KKBpfxPass);
        RSACryptoServiceProvider rsaCSP = (RSACryptoServiceProvider)KKbCert.PublicKey.Key;
        byte[] SignData = rsaCSP.SignData(ConvertStringToByteArray(StrForSign), "SHA1"); // keyset does not exist!!!!!!!!
        Array.Reverse(SignData);
        string ResultStr = "<document>" + StrForSign + "<merchant_sign type=\"RSA\">" + Convert.ToBase64String(SignData, Base64FormattingOptions.None) + "</merchant_sign></document>";
        return Convert.ToBase64String(ConvertStringToByteArray(ResultStr), Base64FormattingOptions.None);
    }

1 个答案:

答案 0 :(得分:2)

据我了解,您正试图使用​​只有公开键的RSA 签署某些数据。

RSA签名是一个文档验证过程。您使用私有键签署文档,然后使用公开键检查它是否真的是您的。换句话说,您无法使用公钥签署文档。

这就是你得到错误“keyset不存在”的原因。您的密钥集不包含用于签名数据的私钥 您需要从KkbCert中提取私钥并将其用于签名。