使用充气城堡和证书私钥的数字签名

Posted

技术标签:

【中文标题】使用充气城堡和证书私钥的数字签名【英文标题】:Digital signature using bouncy castle and certificate private key 【发布时间】:2015-12-23 04:47:24 【问题描述】:

我正在开发一项功能来对某些内容进行数字签名。我有带有私钥的有效证书。如何使用私钥和充气城堡进行数字签名?

我尝试了以下方法,但想要一些正确的方法来使用充气城堡实现同样的效果:

X509Certificate2 signingCert =
    CryptoHelper.FindCertificate("21A6107EC254457AAF3D4D6FD286FB79");

var rsaObj = (RSACryptoServiceProvider)signingCert.PrivateKey;
_privateKey = rsaObj.ExportParameters(true);

谢谢!

【问题讨论】:

您的问题甚至不包含任何签名生成。而且 SO 不是为您编写代码的服务。 @stackers 是的,就是我...有任何问题或 cmets 吗? 【参考方案1】:

根据您的代码,我不确切知道您需要什么,但 X509 命名空间/代码位于 bcgit/bc-csharp - X509 并且有一个用于在 System.Security.CryptographyBouncyCastle 之间转换的实用程序类 bcgit/bc-csharp - DotNetUtilities.cs

BouncyCastle 进行了大量测试(和示例)。也看看bcgit/bc-csharp - TestCertificateGen.cs。也许这对你有帮助。

编辑:一般来说应该是这样的

using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.X509;

// Your loaded certificate
X509Certificate cert = null;             

// Your loaded RSA key   
AsymmetricKeyParameter privateKey = null;

AsymmetricKeyParameter publicKey = cert.GetPublicKey();

ISigner signer = SignerUtilities.GetSigner(cert.SigAlgName);

// Init for signing, you pass in the private key
signer.Init(true, privateKey);

// Init for verification, you pass in the public key
signer.Init(false, publicKey);

问候

【讨论】:

谢谢。基本上我有证书并拥有证书中的私钥。我想使用充气城堡对字符串进行数字签名。

以上是关于使用充气城堡和证书私钥的数字签名的主要内容,如果未能解决你的问题,请参考以下文章

如何使用椭圆曲线私钥和 ECDSA 算法签署证书?

使用充气城堡验证签名

数字证书

c#充气城堡验证签名上的InvalidCastException

验证充气城堡上的 javacard 签名 ALG_ECDSA_SHA

KeyVault 生成的带有可导出私钥的证书