类型为'System.Security.Cryptography.CryptographicException'的异常:密钥集不存在。

3

尝试了这个链接中的所有步骤: 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);
    }

你尝试过联系Kazkom软件工程师解决你的问题吗? - Yeldar Kurmangaliyev
网,没有连接上 - Магжан Куан
1个回答

3
据我了解,您正在尝试使用只有公钥的RSA签名一些数据。
RSA签名是一种文档验证过程。您使用私钥签署文档,然后使用公钥检查它是否真的属于您。换句话说,您不能使用公钥签署文档。
这就是为什么您会收到“密钥集不存在”的错误消息。您的密钥集不包含用于签署数据的私钥。 您需要从您的KkbCert中提取私钥并用它进行签名。

我提取了 KKBpfxFile,导入成功完成。 - Магжан Куан

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接