如何在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-512PKCS1Encoding:专门实现PKCS#1 v1.5填充的包装器,把基础RSA引擎包装后就能支持该填充模式RsaEngine:基础的RSA加密/签名引擎,负责核心的RSA运算
最后补充一点:如果你的场景需要的是PKCS#1 v2.2规范里的PSS填充(一种更安全的概率性填充),那才需要单独指定PssSigner之类的实现,但从你的描述来看,你要的是传统的PKCS1填充,那默认的SHA512withRSA写法就完全够用了~
内容的提问来源于stack exchange,提问作者Slicc
相关产品推荐
相关产品推荐

