我的编程空间,编程开发者的网络收藏夹
学习永远不晚

PHP 对PDF文件实现数字签名

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

PHP 对PDF文件实现数字签名

PHP通过TCPDF库对生成的PDF文件进行数字签名。

效果如下:

这个是因为签名证书不在可信任证书列表中。

目录

准备数字证书

1.申请数字证书

2.自签名证书

安装TCPDF

证书签名

设置证书路径

设置证书信息

设置文档签名

设置签名外观

图像签名外观

空签名外观

完整代码

总结


准备数字证书

1.申请数字证书

可以申请数字证书也可使用ssl证书,通过向CA机构或服务器平台申请获得。

申请后的证书文件,如果有crt文件,即可直接使用创建数字签名。

若没有,可通过命令获取crt文件。

如通过ssl证书签名

证书目录如下:

通过IIS下的pfx文件获得crt证书

附带有密码文件,创建crt需要密码。

命令如下:

openssl pkcs12 -in fullchain.pfx -out tcpdf.crt -nodes

命令行输入后,需要填写密码(没有密码直接回车),

之后就可得到数字签名所需的证书文件。

2.自签名证书

可以创建自签名证书。

Tcpdf中自签名证书命令如下:

创建自签名:

openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt

过程如下:

需要输入一些证书信息。

附带两条转成其他格式的命令。

将crt导出到p12:

openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12

 将pfx证书转换为pem:

openssl pkcs12 -in tcpdf.pfx -out tcpdf.crt -nodes

下载证书到项目目录中,以备程序使用。

安装TCPDF

安装命令

composer require tecnickcom/tcpdf

证书签名

设置证书路径

必须file开头接根目录下文件路径。

$certificate = 'file://common/tcpdf.crt';

设置证书信息

$info = array(    'Name' => '测试数字签名',    'Location' => '北京',    'Reason' => '测试数字签名',    'ContactInfo' => 'http://new.solveset.com',);

设置文档签名

$pdf->setSignature($certificate, $certificate, '123456yjl', '', 2, $info);

设置签名外观

图像签名外观

// 创建签名内容(图像和/或文本)$pdf->Image('common/southeast.jpg', 180, 70, 15, 15, 'JPG');// 定义签名外观的活动区域$pdf->setSignatureAppearance(180, 70, 15, 15);

空签名外观

$pdf->addEmptySignatureAppearance(180, 90, 15, 15);

完整代码

$pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);// 设置文档信息$pdfName = '测试文档';$pdf->SetCreator($pdfName);$pdf->SetAuthor('YJL');$pdf->SetTitle($pdfName);$pdf->SetSubject($pdfName);//设置字体 stsongstdlight支持中文$pdf->SetFont('stsongstdlight', '', 10);// 设置图片比例因子$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);// 设置自动分页 距离底部多少进行分页$pdf->SetAutoPageBreak(true, PDF_MARGIN_BOTTOM);// 第一页$pdf->AddPage();$html = '        购销合同

购销合同

(供方)(以下简称乙方):

经协商同意,根据中华人民共和国经济法的规定,订立合同如下:

一、 产品名称、商标、型号、厂家、数量、价格、供货时间:

二、 质量要求技术标准、供方对质量负责的条件和期限:按技术协议

三、 交(提)货地点、方式:使用快递

四、 运输方式及到达站港和费用负担:送货上门、供方负担

五、 合理损耗及计算方法:无

六、 包装标准、包装物的供应与回收:原包装、不回收。

七、 验收标准、方法及提出异议期限:按原厂技术标准验收,需方收到货后提出异议期限为十五天。

八、 结算方式及期限:货到验收合格、发票到后一周内付款。

九、 违约责任:如发生质量问题,需方将提出索赔。具体事宜协商解决。

十、 解决合同纠纷的方式:合同发生争议时,双方应协商解决,协商不成时,任何一方可向经济合同仲裁委员会申请仲裁,或直接向人民法院起诉。

十一、 其它事项:本合同一式两份,双方各执一份,经双方签字盖章有效,均有法律效力。

订立合同人:

'$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '1', true);// 数字签名// 设置证书路径 必须file开头接根目录下文件路径$certificate = 'file://common/tcpdf.crt';// 设置证书信息$info = array( 'Name' => '测试数字签名', 'Location' => '北京', 'Reason' => '测试数字签名', 'ContactInfo' => 'http://new.solveset.com',);// 设置文档签名$pdf->setSignature($certificate, $certificate, '123456yjl', '', 2, $info);// 设置签名外观// 创建签名内容(图像和/或文本)$pdf->Image('common/southeast.jpg', 180, 70, 15, 15, 'JPG');// 定义签名外观的活动区域$pdf->setSignatureAppearance(180, 70, 15, 15);// 设置空签名外观$pdf->addEmptySignatureAppearance(180, 90, 15, 15);// 四种模式 I输出、D下载、F保存本地、S输出二进制字符串$fileNewName = $fileDir . $filename;$pdf->Output( 'test.pdf', 'I');

总结

按照官网的示例,通过创建自签名证书结合自己的实际场景做了一个数字签名应用。

有一点要注意,只能添加一个数字签名,设置两个的话,第二个的位置会覆盖签名的坐标,导致第一个签名在第二个位置。

来源地址:https://blog.csdn.net/json_ligege/article/details/131379147

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

PHP 对PDF文件实现数字签名

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么用Java实现添加、验证PDF数字签名

这篇文章主要讲解了“怎么用Java实现添加、验证PDF数字签名”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Java实现添加、验证PDF数字签名”吧!目录Jar文件获取及导入方法:在设
2023-06-20

Ubuntu文件数字签名怎么应用

本篇内容主要讲解“Ubuntu文件数字签名怎么应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ubuntu文件数字签名怎么应用”吧!提示:“数字签名”是一种采用公钥加密算法对电子信息进行签名的
2023-06-16

基于Python实现对PDF文件的OCR识别

最近在做一个项目的时候,需要将PDF文件作为输入,从中输出文本,然后将文本存入数据库中。为此,我找寻了很久的解决方案,最终才确定使用tesseract。所以不要浪费时间了,我们开始吧。 1.安装tesseract 在不同的系统中安装tess
2022-06-04

php实现接口api数据签名及验签

这篇文章论述了PHP实现API数据签名和验签的方法,用于确保请求的真实性和完整性。签名过程涉及私钥签名、哈希算法和Base64编码。验签过程则使用公钥验证签名并检查数据完整性。具体实现包括私钥和公钥生成、签名哈希值、验证签名,以及提供安全注意事项。
php实现接口api数据签名及验签
2024-04-02

DSA数字签名算法怎么实现

本篇内容介绍了“DSA数字签名算法怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、DSA概述为了确保数据传输的安全性,不得不采取一
2023-06-04

Java怎么实现抠图片文字或签名

本篇内容介绍了“Java怎么实现抠图片文字或签名”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!java抠图片文字或签名运行原理第一步 遍历像
2023-07-02

java中怎么实现数字签名系统

本篇文章为大家展示了java中怎么实现数字签名系统 ,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1。生成密钥对 生成密钥对可用Java提供的类KeyPairGenerator,用其中的getIns
2023-06-03

Python如何实现elgamal数字签名算法

要实现ElGamal数字签名算法,可以按照以下步骤:1. 生成密钥对:- 选择一个大素数p作为模数。- 选择一个生成元g,确保g是p的一个原根。- 随机选择一个私钥x,满足0 - 计算公钥y = g^x mod p。2. 签名:- 随机选择
2023-10-10

win10系统无法验证文件数字签名(0xcoooo428)。

今天我们来谈谈win10系统无法验证文件数字签名(0xcooo428)的解决方案。1.按主机上的电源按钮(按笔记本电脑键盘上的电源按钮)-关机,关机后按电源按钮重新启动,然后按键盘Ctrl打开电源进入【选择操作系统】界面,点击:更改默认值或
2023-07-15

vue如何实现对请求参数进行签名

这篇文章主要介绍了vue如何实现对请求参数进行签名问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-28

Golang中crypto/ecdsa库实现数字签名和验证

本篇文章介绍了Go中使用crypto/ecdsa库执行数字签名和验证的方法。通过Sign函数生成签名,通过Verify函数验证签名。示例代码演示了如何使用私钥签名消息并使用公钥验证签名。文章还提供了最佳实践和优势,并指出了可能的局限性。
Golang中crypto/ecdsa库实现数字签名和验证
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录