RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1281864
Accepted
Skywave
Skywave
Asked:2022-05-14 18:00:31 +0000 UTC2022-05-14 18:00:31 +0000 UTC 2022-05-14 18:00:31 +0000 UTC

获取 CryptoPro PDF 文件的电子签名数据

  • 772

上传到网站的文件

其中一些是数字签名的

有一个确定此签名数据(序列号、作者、日期)的工作版本:

https://stackoverflow.com/questions/46430367/how-to-retrieve-digital-signature-information-from-pdf-with-php

但如果该文件由 CryptoPro 签名,则会发生未知算法异常。

实际上,脚本从文件中提取出某个签名并以某种方式对其进行解析

$seq = Sequence::fromDER($binaryData);
$signed_data = $seq->getTagged(0)->asExplicit()->asSequence();
$ecac = $signed_data->getTagged(0)->asImplicit(Element::TYPE_SET)->asSet();
$ecoc = $ecac->at($ecac->count() - 1);
$cert = Certificate::fromASN1($ecoc->asSequence());
$tbsCert = $cert->tbsCertificate();

签名看起来像这样

...
312c 302a 0603 5504 030c 23d0 9cd0 b8d0
bdd0 bad0 bed0 bcd1 81d0 b2d1 8fd0 b7d1
8c20 d0a0 d0be d181 d181 d0b8 d0b8 301e
170d 3138 3037 3036 3132 3138 3036 5a17
0d33 3630 3730 3131 3231 3830 365a 3082
0124 311e 301c 0609 2a86 4886 f70d 0109
0116 0f64 6974 406d 696e 7376 7961 7a2e
7275 310b 3009 0603 5504 0613 0252 5531
1830 1606 0355 0408 0c0f 3737 20d0 9cd0
bed1 81d0 bad0 b2d0 b031 1930 1706 0355
0407 0c10 d0b3 2e20 d09c d0be d181 d0ba
d0b2 d0b0 312e 302c 0603 5504 090c 25d1
...

这是发生异常的地方。

我在 Debian 上安装了 CryptoPro,并试图找到一个实用程序来解析这个签名。

也许有人遇到过这个?如何提取签名数据?

pdf
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Skywave
    2022-05-18T19:37:55Z2022-05-18T19:37:55Z

    一般来说,这与cryptopro无关。

    该库无法使用 gost 证书。

    使用的控制台 openssl

    将签名保存到文件

    file_put_contents('signature.pkcs7', $binaryData);
    

    我们从中取出一串证书

    openssl pkcs7 -in signature.pkcs7 -inform DER -print_certs -out certificates.cer
    

    我们从链中取出最后一个证书并解析它

    $content = file_get_contents($certsPath);
    $content = substr($content, strrpos($content, '-----BEGIN CERTIFICATE-----'));
    $certificateParams = openssl_x509_parse($content);
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5