基本上我的应用程序使用 PKCS#7 由遠程Web服务创建的签名。
我的应用程序发送这个Web服务的原始文件的哈希值(添加空签名字段后的可签名字节的哈希)并接收Base64编码的签名文件。
我将此签名嵌入到之前生成的具有空签名字段的临时pdf文件中
最后,我的签名未经验证因为Adobe Reader表示文档已更改或已损坏。
代码添加空簽名字段并获取Pdf的可签名字节
由于此操作生成 tempPdf 我从这个 tempPdf 文件接收到pdf文档的可标记字节的散列。
然后使用下面的代码我重新打开这个tempFile并嵌入Base64编码的 PKCS#7 签名。
代码打开Temp Pdf并嵌入接收的签名
由于此操作我生成了最后的 signedPdf 但是,Adobe表示由于更改或损坏,签名无效
我发送给web服务的tempFile攵件的哈希为:
我从web服务收到的签名是:
我比较了tempFile和signedFile的字节以及tempFile的零(它们用于我认为的临时签名文件)被signedFile中的实际签名替换。
我真的被困在这一点上我不知道我应该在哪里看下。
在您从Web服务收到的签名中有:
这里,您的base64编码哈希显示为嵌入的签名数据(偏移量56..99)此外,哈希算法被选为SHA-1(偏移)签名文档哈希是一个20字节的值,它与SHA-1哈希值的大小相匹配此外,RSA还用于PKCS#11.5(偏移)中描述的签名
因此,它看起来像您的签名服务不会将您的输入用作base64编码的预先计算的文档哈希值但作为普通数据使用SHA1withRSA / 2048签名。
所以错误不在iText中使用代码而昰在您的签名服务调用代码。
登录体验更流畅的互动沟通
工商銀中国工商银行u盾使用数据签名错误为什么
工商银中国工商银行u盾使用数据签名错误为什么
您提交的内容含有以下违规字符请仔细检查!
> 工商银中国工商银行u盾使用数据签名错误为什么