此链接 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);
}
答案 0 :(得分:2)
据我了解,您正试图使用只有公开键的RSA 签署某些数据。
RSA签名是一个文档验证过程。您使用私有键签署文档,然后使用公开键检查它是否真的是您的。换句话说,您无法使用公钥签署文档。
这就是你得到错误“keyset不存在”的原因。您的密钥集不包含用于签名数据的私钥
您需要从KkbCert
中提取私钥并将其用于签名。