You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C# Bouncy Castle的RSA/SHA512签名中添加PKCS1填充?

如何在Bouncy Castle的RSA/SHA512签名中添加PKCS1填充?

我现在有一段用C# Bouncy Castle库实现RSA/SHA512数据签名的代码,但不确定如何在此过程中添加PKCS1填充。我的代码如下:

using (var txtreader = new StringReader(File.ReadAllText(_certificatePath))) 
{ 
    var keyPair = (AsymmetricCipherKeyPair)new PemReader(txtreader).ReadObject(); 
    var key = keyPair.Private as RsaPrivateCrtKeyParameters; 
    ISigner sig = SignerUtilities.GetSigner("SHA512withRSA"); 
    sig.Init(true, key); 
    sig.BlockUpdate(requestToSign, 0, requestToSign.Length);
    // 后续签名生成代码...
}

回答:

Hey there! 其实你大概率已经在使用PKCS#1 v1.5填充了——让我给你理清楚这里的细节:

  • 在Bouncy Castle的签名工具类中,"SHA512withRSA"这个算法标识符默认就对应RSASSA-PKCS1-v1_5签名机制,也就是你要的PKCS1填充方案,完全符合PKCS#1标准里的v1.5填充规范。所以你当前的代码其实已经满足需求啦!

不过如果想要让代码的意图更明确(比如团队协作时避免歧义),你也可以显式地组合哈希算法、填充方式和RSA引擎来创建签名器,写法如下:

using (var txtreader = new StringReader(File.ReadAllText(_certificatePath))) 
{ 
    var keyPair = (AsymmetricCipherKeyPair)new PemReader(txtreader).ReadObject(); 
    var privateKey = keyPair.Private as RsaPrivateCrtKeyParameters; 

    // 显式指定SHA-512哈希 + PKCS#1 v1.5填充的RSA签名器
    var signer = new RsaDigestSigner(new Sha512Digest(), new PKCS1Encoding(new RsaEngine()));
    signer.Init(true, privateKey);
    signer.BlockUpdate(requestToSign, 0, requestToSign.Length);
    
    byte[] signature = signer.GenerateSignature();
    // 后续处理签名的逻辑...
}

这里几个关键组件的作用:

  • Sha512Digest():指定签名时使用的哈希算法为SHA-512
  • PKCS1Encoding:专门实现PKCS#1 v1.5填充的包装器,把基础RSA引擎包装后就能支持该填充模式
  • RsaEngine:基础的RSA加密/签名引擎,负责核心的RSA运算

最后补充一点:如果你的场景需要的是PKCS#1 v2.2规范里的PSS填充(一种更安全的概率性填充),那才需要单独指定PssSigner之类的实现,但从你的描述来看,你要的是传统的PKCS1填充,那默认的SHA512withRSA写法就完全够用了~

内容的提问来源于stack exchange,提问作者Slicc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:03:27