'System.Security.Cryptography.CryptographicException' 类型的异常:键集不存在

An exception of type 'System.Security.Cryptography.CryptographicException': keyset does not exist

在此完成的所有步骤 link 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);
    }

据我了解,您正在尝试使用只有 public 密钥的 RSA 签署 一些数据。

RSA 签名是一种文档验证过程。您使用 private 密钥签署文档,然后使用 public 密钥检查它是否真的是您的。换句话说,您不能使用 public 密钥签署文档。

这就是您收到错误 "keyset does not exist" 的原因。您的密钥集不包含用于签署数据的私钥。
您需要从 KkbCert 中提取私钥并将其用于签名。