SpringBoot实战(三十一)集成iText5,实现RSA签署PDF

目录

    • 一、什么是电子签章?
      • 1.1 定义
      • 1.2 电子签章的工作原理
      • 1.3 电子签章的优势
    • 二、准备工作:证书生成、印章生成
      • 2.1 证书生成
      • 2.2 印章生成
    • 三、Java代码实现 RSA 签署 PDF
      • 3.1 坐标签署
      • 3.2 关键字签署
      • 3.3 日期签署
      • 3.4 骑缝章签署
      • 3.5 文本域签署

一、什么是电子签章?

1.1 定义

  • 电子签章 是一种数字技术,用于在电子文档上添加一个可视化的印章图像,并结合数字签名技术确保文档的完整性和来源的真实性。

电子签章通常包括以下几个要素:

  1. 可视化印章图像: 类似于传统的物理印章,电子签章通常包含一个可视化的图像,显示公司的名称、印章编号等信息。
  2. 数字签名: 使用非对称加密技术(如 RSAECC)生成的数字签名,确保文档在签署后为被篡改。
  3. 时间戳: 通过时间戳服务器(TSA)获取的时间戳信息,确保签名的信息是可信的。
  4. 证书: 使用数字证书来验证签署者的身份,数字证书通常由受信任的证书颁发机构(CA)签发。

1.2 电子签章的工作原理

在这里插入图片描述

  1. 生成数字证书: 签署者向证书颁发机构(CA)申请数字证书,CA 验证签署者的身份信息后,签发数字证书。
  2. 生成数字签名: 签署者使用私钥对电子文档的哈希值进行签名,生成数字签名。
  3. 添加时间戳: 签署者向时间戳服务器(TSA)发送时间戳请求,TSA 返回带有时间戳的时间戳令牌。
  4. 嵌入电子签章: 将可视化的印章图像、数字签名和时间戳令牌嵌入到电子文档中,形成电子签章。

在这里插入图片描述

  1. 验证电子签章: 接收者使用签署者的公钥验证数字签名的正确性,检查时间戳的有效性,确保文档的完整性和来源的真实性。

1.3 电子签章的优势

  1. 法律效力: 基于《中华人民共和国电子签名法》等相关法规和技术规范,具有法律效力的电子签章一定是需要使用 CA 数字证书进行对文件签名,并把 CA 数字证书存放在签名后文件中。
  2. 安全性: 电子签章结合了数字签名和时间戳技术,确保文档在签署后未被篡改,提高了文档的安全性和可信度。
  3. 便捷性: 电子签章可以在任何地点、任何时间进行,无需物理印章和纸张,大大提高了工作效率。
  4. 成本效益: 电子签章减少了纸张和物理印章的使用,降低了办公成本和环境影响。

二、准备工作:证书生成、印章生成

2.1 证书生成

1)在线生成证书: https://myssl.com/create_test_cert.html

可以根据需要生成各种类型的证书,填写相关信息,点击【生成】按钮即可,如下图所示:

在这里插入图片描述

生成之后,我们需要对 证书私钥 进行下载,如下图所示:

在这里插入图片描述

下载后,文件如下所示:

在这里插入图片描述

2)在线证书格式转换: https://www.lddgo.net/encrypt/cert-format-converter

打开网页后,导入上一步的证书文件、私钥文件,点击【转换】,如下图所示:

在这里插入图片描述

转换之后,点击【下载】,即可下载 .p12 格式的证书文件,如下图所示:

在这里插入图片描述

下载文件如下:

在这里插入图片描述

2.2 印章生成

  • 印章生成网址: http://web.aa6666.com/

在这里插入图片描述


三、Java代码实现 RSA 签署 PDF

电子签章 根据加密算法的不同 分为 RSA 标准签署和 SM2 国密签署两种,这里我们只讨论 RSA 标准签署的实现方式。

注意: 如果遇到如下报错,说明 JDK 版本过低导致 KeyStore 加载 PKCS12 格式证书报错,如果使用的是 JDK8,需要升级到 1.8.0_301 以上。

  • java.io.IOException: parseAlgParameters failed: ObjectIdentifier() – data isn’t an object ID (tag = 48)
java.io.IOException: parseAlgParameters failed: ObjectIdentifier() -- data isn't an object ID (tag = 48)at sun.security.pkcs12.PKCS12KeyStore.parseAlgParameters(PKCS12KeyStore.java:792)at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1998)at java.security.KeyStore.load(KeyStore.java:1445)at com.demo.service.impl.ITextSignServiceImpl.getSignCert(ITextSignServiceImpl.java:289)at com.demo.service.impl.ITextSignServiceImpl.main(ITextSignServiceImpl.java:65)
Caused by: java.io.IOException: ObjectIdentifier() -- data isn't an object ID (tag = 48)at sun.security.util.ObjectIdentifier.<init>(ObjectIdentifier.java:253)at sun.security.util.DerInputStream.getOID(DerInputStream.java:281)at com.sun.crypto.provider.PBES2Parameters.engineInit(PBES2Parameters.java:267)at java.security.AlgorithmParameters.init(AlgorithmParameters.java:293)at sun.security.pkcs12.PKCS12KeyStore.parseAlgParameters(PKCS12KeyStore.java:788)... 4 common frames omitted

3.1 坐标签署

Java代码如下:

@Override
public void signByXy() throws IOException {// 坐标签署Map<String, Object> signCert = getSignCert();PrivateKey pk0 = (PrivateKey) signCert.get("pk"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/471355.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue面试题7|[2024-11-14]

问题1&#xff1a;什么是渐进式框架? vue.js router vuex element ...插件 vue.js 渐0 router 渐1 vuex 渐2 vue.js只是一个核心库&#xff0c;比如我再添加一个router或者vuex&#xff0c;不断让项目壮大&#xff0c;就是渐进式框…

【力扣热题100】[Java版] 刷题笔记-169. 多数元素

题目&#xff1a;169. 多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 解题思路 该题目的核心点是&#xff1a;元素出现…

Dolby TrueHD和Dolby Digital Plus (E-AC-3)编码介绍

文章目录 1. Dolby TrueHD特点总结 2. Dolby Digital Plus (E-AC-3)特点总结 Dolby TrueHD 与 Dolby Digital Plus (E-AC-3) 的对比 Dolby TrueHD和Dolby Digital Plus (E-AC-3) 是两种高级的杜比音频编码格式&#xff0c;常用于蓝光影碟、流媒体、影院等高品质音频传输场景。它…

第三十一天|贪心算法| 56. 合并区间,738.单调递增的数字 , 968.监控二叉树

目录 56. 合并区间 方法1&#xff1a;fff 看方法2&#xff1a;fff优化版 方法3&#xff1a; 738.单调递增的数字 968.监控二叉树&#xff08;贪心二叉树&#xff09; 56. 合并区间 判断重叠区间问题&#xff0c;与452和435是一个套路 方法1&#xff1a;fff 看方法2&am…

火车车厢重排问题,C++详解

目录 实验题目 解题思路 1先看缓冲队列队头是否符合要求 2看队头元素是否符合要求 完整代码 运行结果 实验题目 火车车厢重排问题 实验说明&#xff1a;转轨站示意图如下&#xff1a; 火车车厢重排过程如下&#xff1a; 火车车厢重排算法伪代码如下&#xff1a; 解题思路…

算法学习第一弹——C++基础

早上好啊&#xff0c;大佬们。来看看咱们这回学点啥&#xff0c;在前不久刚出完C语言写的PTA中L1的题目&#xff0c;想必大家都不过瘾&#xff0c;感觉那些题都不过如此&#xff0c;所以&#xff0c;为了我们能更好的去处理更难的题目&#xff0c;小白兔决定奋发图强&#xff0…

LabVIEW大数据处理

在物联网、工业4.0和科学实验中&#xff0c;大数据处理需求逐年上升。LabVIEW作为一款图形化编程语言&#xff0c;凭借其强大的数据采集和分析能力&#xff0c;广泛应用于实时数据处理和控制系统中。然而&#xff0c;在面对大数据处理时&#xff0c;LabVIEW也存在一些注意事项。…

AUTOSAR_EXP_ARAComAPI的7章笔记(3)

☞返回总目录 相关总结&#xff1a;AutoSar AP简单多绑定总结 7.3 多绑定 如在 5.4.3 小节中简要讨论的&#xff0c;某个代理类 / 骨架类的不同实例之间的技术传输是不同的&#xff0c;多绑定描述了这种情况的解决方案。多种技术原因都可能导致这种情况出现&#xff1a; 代…

一键生成本地SSL证书:打造HTTPS安全环境

一键生成本地SSL证书&#xff1a;打造HTTPS安全环境 日光下的寒林没有一丝杂质&#xff0c;空气里的冰冷仿佛来自故乡遥远的北国&#xff0c;带着一些相思&#xff0c;还有细微几至不可辨认的骆驼的铃声。–《心美&#xff0c;一切皆美》 在本地开发环境中启用 HTTPS 一直是许多…

mysql 配置文件 my.cnf 增加 lower_case_table_names = 1 服务启动不了的原因

原因&#xff1a;在MySQL8.0之后的版本&#xff0c;只允许在数据库初始化时指定&#xff0c;之后不允许修改了 mysql 配置文件 my.cnf 增加 lower_case_table_names 1 服务启动不了 报错信息&#xff1a;Job for mysqld.service failed because the control process exited …

Zookeeper的安装与使用

一、简介 1.1、概念 ZooKeeper 是一个开源的分布式协调服务&#xff0c;主要用于解决分布式系统中的数据一致性问题。它提供了一种可靠的机制来管理和协调分布式系统的各个节点。ZooKeeper 的设计目标是简化分布式应用的开发&#xff0c;提供简单易用的接口和高性能、高稳定性…

Vue3.js - 一文看懂Vuex

1. 前言 Vuex 是 Vue.js 的官方状态管理库&#xff0c;用于在 Vue 应用中管理组件之间共享的状态。Vuex 适用于中大型应用&#xff0c;它将组件的共享状态集中管理&#xff0c;可以避免组件间传递 props 或事件的复杂性。 2. 核心概念 我们可以将Vuex想象为一个大型的Vue&…

图论-代码随想录刷题记录[JAVA]

文章目录 前言Floyd 算法dijkstra&#xff08;朴素版&#xff09;最小生成树之primkruskal算法 前言 新手小白记录第一次刷代码随想录 1.自用 抽取精简的解题思路 方便复盘 2.代码尽量多加注释 3.记录踩坑 4.边刷边记录&#xff0c;更有成就感&#xff01; 5.解题思路绝大部分来…

《Python网络安全项目实战》项目5 编写网站扫描程序

《Python网络安全项目实战》项目5 编写网站扫描程序 项目目标&#xff1a;任务5.1 暴力破解网站目录和文件位置任务描述任务分析任务实施相关知识任务评价 任务5.2 制作网页JPG爬虫任务分析任务实施相关知识任务评价任务拓展 WEB网站安全渗透测试过程中需要进行目录扫描和网站爬…

时序论文20|ICLR20 可解释时间序列预测N-BEATS

论文标题&#xff1a;N-BEATS N EURAL BASIS EXPANSION ANALYSIS FOR INTERPRETABLE TIME SERIES FORECASTING 论文链接&#xff1a;https://arxiv.org/pdf/1905.10437.pdf 前言 为什么时间序列可解释很重要&#xff1f;时间序列的可解释性是确保模型预测结果可靠、透明且易…

硬件工程师之电子元器件—二极管(4)之热量对二极管温度特性的影响

写在前面 本系列文章主要讲解二极管的相关知识,希望能帮助更多的同学认识和了解二极管。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 二极管 7. 热量对二极管温度特性的影响 半导体器件的电气特性通常对环境温度和工作结温敏感。 Si二极管的特性在工作范围内通常如下…

Java算法OJ(7)随机快速排序

目录 1.前言 2.正文 1. 快速排序的基本原理 2. 随机快速排序的改进 3. 随机快速排序的步骤 3.小结 1.前言 哈喽大家好吖&#xff0c;今儿给大家带来算法—随机快速排序相关知识点&#xff0c;废话不多说让我们开始。 2.正文 在了解随机快排之前&#xff0c;先了解一下…

基于 Python Django 的二手房间可视化系统分析

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

用MVVM设计模式提升WPF开发体验:分层架构与绑定实例解析

MVVM&#xff08;Model-View-ViewModel&#xff09;是一种架构模式&#xff0c;广泛应用于现代前端开发&#xff0c;尤其是在微软的WPF&#xff08;Windows Presentation Foundation&#xff09;应用程序中。它旨在通过将视图&#xff08;UI&#xff09;与业务逻辑&#xff08;…

如何进行产线高阶能耗数据的计算和可视化?

一、前言 在当前经济下行时期&#xff0c;越来越来多企业开始对产线进行数字化转型&#xff0c;提高企业竞争力。在产线数字化转型过程中&#xff0c;产线高阶能耗数据的计算和可视化是比较重要的一环&#xff0c;今天小编就和大家分享如何对产线能耗数据进行计算和可视化。 …