以下是创建数字签名的代码:
ContentInfo contentInfo = new ContentInfo(msg);
SignedCms signedCms = new SignedCms(contentInfo);
CmsSigner cmsSigner = new CmsSigner(signerCert);
signedCms.ComputeSignature(cmsSigner, false);
如何获取证书支持的算法列表? 以及如何使用列表中的指定算法创建数字签名?
以下是一些用于创建数字签名的专有软件的屏幕截图示例:
第一个证书的算法列表:
第二证书的算法列表:
答案 0 :(得分:0)
通常,您可以对数据使用任何类型的哈希。然后将此哈希值放入SignedInfo结构中。然后使用给定算法的签名算法标识符对该SignedInfo结构本身进行签名,该算法还包括散列算法。您似乎无法直接指定签名算法,但可以使用SignerInfo.DigestAlgorithm
指定基础哈希算法。我只能假设它也用于散布在SignedInfo中的实际数据。
此哈希算法必须在签名生成算法中可用,但未在X509证书中指定。
GOST R特定于俄罗斯,因此我只能猜测该选项仅适用于特定的俄罗斯证书(可能与签名算法或某种证书扩展相关联。)
答案 1 :(得分:0)
Maarten所说的是正确的。证书包含公钥的数字签名,根据某种算法生成。如果第一个证书签名是GOST R 34.10-2001,而在第二个证书签名是最可能的RSA。任何哈希都可用于签名数据,但GOST R 34.10-2001 clearly states应将GOST R 34.11-94哈希用作唯一的哈希算法。 总结一下:允许的哈希算法列表可选择在标准中定义,该标准定义了数字签名方案。