gpt4 book ai didi

使用 C 语言创建带有外部数字签名的 pkcs#7 对象

转载 作者:行者123 更新时间:2023-11-30 16:44:14 26 4
gpt4 key购买 nike

我正在使用用于签署 pdf 文档的智能卡设备。我已经知道如何使用 itext 对 pdf 进行签名。

我有一个 20 字节 sha-1 哈希、256 字节签名(通过智能卡私钥加密的 rsa)和公钥(.cer 证书)

有没有办法使用 cryptlib 等免费库在 C 中创建 pkcs#7 二进制对象?

最佳答案

您似乎想要使用预先计算的签名生成 PKCS#7/CMS(加密消息语法)签名。

令我惊讶的是,这是可能的,但 IF 非常大。 IF 是指 CMS 消息不包含任何需要签名的其他元数据。 In the badly phrased words of the CMS RFC :

...
When the signedAttrs field is absent, only the octets comprising the
value of the SignedData encapContentInfo eContent OCTET STRING (e.g.,
the contents of a file) are input to the message digest calculation.
This has the advantage that the length of the content being signed
need not be known in advance of the signature generation process.
...

您可以排除例如 OpenSSL using the -noattr command line option 中的 signedAtrrs 。不幸的是,我没有找到直接包含签名值本身的方法,但这很可能可以使用 OpenSSL 的 C API 实现 - 并且由于 OpenSSL 是开源的,如果不这样做的话,当然可以修改这个问题't。

<小时/>

注释:

  • 一个好的技巧是在执行 CMS 时使用不同的 key 在零字节值上创建签名,然后查找该值(通过二分搜索或解析 ASN.1 CMS 结构),然后将该签名替换为您生成的那个;
  • CryptLib 和 SHA-1 仅在您计划回到过去时才有用。我强烈建议使用维护良好的库,当然还有安全哈希。

关于使用 C 语言创建带有外部数字签名的 pkcs#7 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44633641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com