C# 无法使用python中的X509Certificate对数据进行签名
我对安全性没有太多经验,但现在我必须用python实现一个签名过程 我有一张证书C# 无法使用python中的X509Certificate对数据进行签名,c#,python,encryption,x509certificate,signing,C#,Python,Encryption,X509certificate,Signing,我对安全性没有太多经验,但现在我必须用python实现一个签名过程 我有一张证书somename.cer。我有一个c#实现示例,说明如何使用该字符串为我的字符串签名,如下所示: CertColl是证书的集合,其中相关代码在前几行中查找带有指纹的相关证书,并返回证书列表 X509Certificate2 cert = certColl[0] RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey; retur
somename.cer
。我有一个c#
实现示例,说明如何使用该字符串为我的字符串签名,如下所示:
CertColl是证书的集合,其中相关代码在前几行中查找带有指纹的相关证书,并返回证书列表
X509Certificate2 cert = certColl[0]
RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey;
return Convert.ToBase64String(rsa.SignData(Encoding.GetEncoding(1251).GetBytes(my_string), new SHA1CryptoServiceProvider()));
my_string
是要在代码中签名和构造的字符串,但我不需要在这里添加这些步骤
因此,我试图在Python中借助
正如我所期望的,现在我可以用这个签名我的_字符串
rsa_key.sign("Hello World", "")
但我收到以下错误:
TypeError:私钥在此对象中不可用
我是否做错了什么,比如在python中使用错误的方法来模拟rsa.SignData?您的证书不包含私钥
从我在你的C#代码中看到的情况来看,我猜你是从Windows证书商店获取证书的。此存储区可以包含带有或不带有私钥的证书
另一方面,.cer
文件(通常)不包含私钥-它们只有公钥。这就是为什么与它签约是不可能的
我猜您已经从Windows证书存储导出了.cer
文件,并且没有选择“导出私钥”选项。如果您以.pfx
或.pvk
格式重新导出该文件并尝试使用该文件签名,您的运气会更好
rsa_key.sign("Hello World", "")