电子签章是如何防伪的?要不要公安备案?

众所周知,公章、合同章、财务章、法人章,公司要刻章必须到公安局备案,用以防伪鉴真。备完案,印章的印模留底存档在公安局,可调档、可比对,一旦发生纠纷,公安局提供证明文件证明印章的合法性。那么电子签章是如何防伪的?要不要公安备案呢?

图不重要,真正的法门在于电子签名技术

电子签章不是抠图出来的红彤彤的“电子章”,抠图ps或者制图软件生成的签名或公章图样,只是实体签章的图像化,不属于法律意义上的电子签名,它与真正的电子签章差之千里。

实际上,电子签章是在电子签名技术的基础上的一种可视化升级,就是使用签署方的印章(签名)图像外观,加盖在原文之上,形成新的签署原文,再进行哈希运算及数字签名,即可实现带电子签章外观的电子化签署,这沿袭了人们习惯的传统盖章或签名的可视效果,并配合电子签名技术来保障电子信息的完整性以及签名人的不可否认性。所以说,电子签章,图不重要,真正的法门在于数字签名技术+数字证书。

数字证书是用于识别互联网用户身份的一种权威性电子文档,就如同在现实中,公司需要印刻公章、个人需要身份证应去公安部指定的机构去制作并进行备案一样,在电子数据领域中的“公安部”就是中国工业和信息化部,工信部授权“电子认证服务机构”(简称CA机构)制作、签发数字证书,用非对称加密的方式,生成一对密码即私钥与公开密钥,并绑定了其持有者的真实身份,人们可以在电子合同的缔约过程中用它来证明自己的身份和验证对方的身份。

数字签名是可信电子签名技术中使用最广泛的一种,利用非对称加密技术对要传输的内容进行加密。

有了数字证书和数字签名的电子签章,就可以鉴定签名人的身份以及可以表达对一项电子数据内容的认可。它还能验证出文件原文在传输过程中有无变动,确保传输电子文件的完整性、真实性和不可抵赖性。

电子签章有效性鉴定只需通过鉴定数字证书完整性即可,相较于线下签字或盖章形式真伪鉴定不便等问题,电子签章模式能够提升快速验签,所以并不需要公安备案。

在Java中,处理OFD(Office Open XML Document Format,通常用于电子发票等)和PDF文件,并添加电子签章和嵌入水印,可以使用专门的库。这里给出一个简化的概述: **OFD文件添加电子签章**: OFD文件的签章通常涉及到XML文档的操作,你可以使用Apache POI XSSF库来读写OFD格式,然后使用如SignatureXML4j之的工具包来创建和插入数字签名。首先,你需要获取用户证书、生成签名、然后在特定位置(比如文档头部或结尾)插入签署信息。 ```java import org.apache.poi.xssf.usermodel.*; // ...其他依赖 // 创建XSSFWorkbook对象 Workbook workbook = new XSSFWorkbook(); // 获取Signer对象并设置证书 Signer signer = new Signer(); signer.setCertificate(cert); // 创建签名 SignedData signedData = signer.sign(workbook); // 插入签名人信息和签名数据到OFD // ...具体操作取决于签章库API workbook.write(outputStream); workbook.close(); ``` **PDF文件添加电子签章**: 对于PDF,可以使用iText库,它提供了丰富的功能处理PDF。同样,需要先获取用户的数字证书,然后创建Signature对象并签章。 ```java import com.itextpdf.text.pdf.AcroFields; import com.itextpdf.text.pdf.PdfReader; // ...其他依赖 PdfReader reader = new PdfReader(inputFile); AcroFields form = AcroFields.getAcroFields(reader, "Form"); form.getField("SignatureFieldName").setValue(signatureBytes); // 填充签名字段 // 写回PDF PdfStamper stamper = new PdfStamper(reader, outputFile); stamper.setSignatureAppearance(signatureAppearance); // 设置签章外观 stamper.close(); reader.close(); ``` **添加水印**: 在OFD中,由于它是XML结构,可能会有一些限制。但是,如果你能找到支持的库,可以在生成XML内容时直接插入水印。在PDF中,使用iText可以轻松地添加文字水印: ```java import com.itextpdf.text.pdf.PdfContentByte; // 添加水印 PdfContentByte canvas = stamper.getOverContent(1); canvas.beginText(); canvas.setFontAndSize(Font.FontFamily.TIMES_ROMAN, 50); canvas.drawString("Watermark", 50, 750); // 水印的位置和文本 canvas.endText(); ``` **相关问题--**: 1. 如何在Java中验证OFD或PDF文件的数字签名的有效性? 2. 是否有现成的库可以直接处理OFD签章而不必深入底层XML操作? 3. 怎样保护PDF水印免受删除或修改?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值