1

这是创建数字签名的代码:

ContentInfo contentInfo = new ContentInfo(msg);
SignedCms signedCms = new SignedCms(contentInfo);
CmsSigner cmsSigner = new CmsSigner(signerCert);            
signedCms.ComputeSignature(cmsSigner, false);     

如何获取证书支持的算法列表?以及如何使用列表中的指定算法创建数字签名?

以下是旨在创建数字签名的专有软件之一的屏幕截图示例:

第一个证书的算法列表:

在此处输入图像描述

第二个证书的算法列表:

在此处输入图像描述

4

2 回答 2

0

马腾说的是对的。证书包含公钥的数字签名,它是根据某种算法生成的。如果第一个证书签名是 GOST R 34.10-2001,第二个是最有可能的 RSA。任何散列均可用于签署数据,但 GOST R 34.10-2001明确指出GOST R 34.11-94 散列应用作唯一散列算法。总结一下:标准中可选地定义了允许的哈希算法列表,该标准定义了数字签名方案。

于 2015-01-31T18:03:57.650 回答
0

通常,您可以对数据使用任何类型的散列。然后将此哈希放入 SignedInfo 结构中。然后使用给定算法的签名算法标识符对 SignedInfo 结构本身进行签名,该算法还包括哈希算法。似乎您不能直接指定签名算法,但是可以使用SignerInfo.DigestAlgorithm. 我只能假设它也用于对放在 SignedInfo 中的实际数据进行哈希处理。

此散列算法必须在签名生成算法中可用,但未在 X509 证书中指定。

GOST R 是特定于俄罗斯的,所以我只能猜测该选项仅适用于特定的俄罗斯证书(可能这与签名算法或某种证书扩展有关)。

于 2014-10-21T17:05:49.430 回答