为什么我不能在 iText7 中的 PKCS7.detached 之前使用 SHA1?

JDChi

在此处输入图片说明

如图所示,现在我可以实现 1,这是我签名的成功代码,我使用

pdfSigner.signExternalContainer(iExternalSignatureContainer, estimatedSize);

不是

 pdfSigner.signDetached();

public class PdfSignatureContainerExt implements IExternalSignatureContainer {

private MySignUtil mySignUtil;
public PdfSignatureContainerExt(MySignUtil mySignUtil){
    this.mySignUtil= mySignUtil;
}

/**
 * 
 * @param data , the data to sign
 * @return a container with the signature and other objects, like CRL and OCSP. The container will generally be a PKCS7 one.
 * @throws GeneralSecurityException
 */
@Override
public byte[] sign(InputStream data) throws GeneralSecurityException {

    byte[] dataBytes = streamToBytes(data);
    return  mySignUtil.signP7DetachData(dataBytes);

}

@Override
public void modifySigningDictionary(PdfDictionary signDic) {
    signDic.put(PdfName.Filter, PdfName.Adobe_PPKLite);
    signDic.put(PdfName.SubFilter, PdfName.Adbe_pkcs7_detached);
}}

为了实现 2 ,我修改了输出结果无效的代码:

public class PdfSignatureContainerExt implements IExternalSignatureContainer {

private MySignUtil mySignUtil;
public PdfSignatureContainerExt(MySignUtil mySignUtil){
    this.mySignUtil= mySignUtil;
}


@Override
public byte[] sign(InputStream data) throws GeneralSecurityException {

        byte[] dataBytes = streamToBytes(data);
        //change here
        BouncyCastleProvider provider = new BouncyCastleProvider();
        Security.addProvider(provider);

        MessageDigest messageDigest = MessageDigest.getInstance("SHA1" , "BC");
        byte[] hash = messageDigest.digest(dataBytes);

        return  mySignUtil.signP7DetachData(hash);      
}

@Override
public void modifySigningDictionary(PdfDictionary signDic) {
    signDic.put(PdfName.Filter, PdfName.Adobe_PPKLite);
    //change here
    signDic.put(PdfName.SubFilter, PdfName.Adbe_pkcs7_sha1);
}}

并且输出符号结果失败,这是我失败的pdf。

无效.pdf

马克尔

用于创建adbe.pkcs7.detached CMS 签名容器的方法

return  mySignUtil.signP7DetachData(data);

(带有InputStream data) 似乎创建容器就像您用来创建adbe.pkcs7.sha1 CMS 容器的方法

return  mySignUtil.signP7DetachData(hash);      

(带有byte[] hash),至少这是您的示例文件所建议的。

这是错误的:正如 PDF 参考 1.7 所说:

  • adbe.pkcs7.detached:PKCS#7 签名数据字段中未封装任何数据。
  • adbe.pkcs7.sha1:字节范围的 SHA1 摘要封装在 PKCS#7 签名数据字段中,ContentInfo 类型为 Data。

(第 8.7.2 节“签名互操作性”)

由于您在这两种情况下都使用了等效的功能来创建 CMS 容器,因此您adbe.pkcs7.sha1容器中PKCS#7 签名数据字段eContentCMSSignedData字段中的可选八位字节字符串的EncapsulatedContentInfo含义)留空,即违反规范。


PS:通常我会参考 ISO 32000 标准,但不幸的是,第 1 部分和第 2 部分中的相应部分已更改,使内容介于更加不清楚和完全错误之间。不幸的是,当人们可以为 ISO 32000-2 进行输入时,我并没有想到这一点。

PPS:Ceterum ceneo adbe.pkcs7.sha1根本不应再使用。我们的验证代码明确没有实现对这些签名的验证。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法使用 PyAsn1 Python 从 pkcs7 信封中获取加密密钥

来自分类Dev

我如何使用itext7从存储在Blob存储中的pdf中提取文本?

来自分类Dev

在Ruby on Rails中解密PKCS7

来自分类Dev

什么可以替代itext7中的短语?

来自分类Dev

为什么我无法在iText7中更改QR码的大小?

来自分类Dev

了解为什么 pkcs7 块在使用 openssl 验证期间失败

来自分类Dev

从PKCS7中提取分离的PKCS7签名(签名和数据)

来自分类Dev

从PKCS7中提取分离的PKCS7签名(签名和数据)

来自分类Dev

使用我的代码制作PAdES LT签名时,Adobe显示PKCS7解析错误

来自分类Dev

在IText7中创建PdfFont

来自分类Dev

为什么我不能在 PHP 7 中访问我的会话变量?

来自分类Dev

使用itext7的addind文本

来自分类Dev

为什么我不能在Windows 7中格式化10 GB分区?

来自分类Dev

为什么我不能在Windows 7防火墙中设法阻止IP地址?

来自分类Dev

为什么我不能在Windows 7中禁用易用性工具?

来自分类Dev

为什么我不能在Windows 7中连接到此隐藏的无线设备?

来自分类Dev

使用adbe.pkcs7.detached创建签名的PDF

来自分类Dev

如何使用证书 pkcs7 签署 xml - Java

来自分类Dev

使用 C# 解码 PKCS7 SMIME 数据

来自分类Dev

如何使用iText7在C#中从MemoryStream创建Image对象?

来自分类Dev

如何使用itext7从标记的pdf中的结构元素中提取文本

来自分类Dev

为什么我不能在Windows 7上使用Cygwin SSH从Github克隆存储库?

来自分类Dev

为什么我不能在iOS 7上正确使用Javascript日志控制台?

来自分类Dev

为什么我不能在iOS 7上正确使用Javascript日志控制台?

来自分类Dev

为什么我不能在Windows 7上使用Cygwin SSH从Github克隆存储库?

来自分类Dev

如何使用 openssl_public_encrypt 制作 PKCS5 和 PKCS7 填充

来自分类Dev

iText7 目录

来自分类Dev

在iText7中的jar中提供字体

来自分类Dev

IText7和C#中缺少GetPageN方法

Related 相关文章

  1. 1

    无法使用 PyAsn1 Python 从 pkcs7 信封中获取加密密钥

  2. 2

    我如何使用itext7从存储在Blob存储中的pdf中提取文本?

  3. 3

    在Ruby on Rails中解密PKCS7

  4. 4

    什么可以替代itext7中的短语?

  5. 5

    为什么我无法在iText7中更改QR码的大小?

  6. 6

    了解为什么 pkcs7 块在使用 openssl 验证期间失败

  7. 7

    从PKCS7中提取分离的PKCS7签名(签名和数据)

  8. 8

    从PKCS7中提取分离的PKCS7签名(签名和数据)

  9. 9

    使用我的代码制作PAdES LT签名时,Adobe显示PKCS7解析错误

  10. 10

    在IText7中创建PdfFont

  11. 11

    为什么我不能在 PHP 7 中访问我的会话变量?

  12. 12

    使用itext7的addind文本

  13. 13

    为什么我不能在Windows 7中格式化10 GB分区?

  14. 14

    为什么我不能在Windows 7防火墙中设法阻止IP地址?

  15. 15

    为什么我不能在Windows 7中禁用易用性工具?

  16. 16

    为什么我不能在Windows 7中连接到此隐藏的无线设备?

  17. 17

    使用adbe.pkcs7.detached创建签名的PDF

  18. 18

    如何使用证书 pkcs7 签署 xml - Java

  19. 19

    使用 C# 解码 PKCS7 SMIME 数据

  20. 20

    如何使用iText7在C#中从MemoryStream创建Image对象?

  21. 21

    如何使用itext7从标记的pdf中的结构元素中提取文本

  22. 22

    为什么我不能在Windows 7上使用Cygwin SSH从Github克隆存储库?

  23. 23

    为什么我不能在iOS 7上正确使用Javascript日志控制台?

  24. 24

    为什么我不能在iOS 7上正确使用Javascript日志控制台?

  25. 25

    为什么我不能在Windows 7上使用Cygwin SSH从Github克隆存储库?

  26. 26

    如何使用 openssl_public_encrypt 制作 PKCS5 和 PKCS7 填充

  27. 27

    iText7 目录

  28. 28

    在iText7中的jar中提供字体

  29. 29

    IText7和C#中缺少GetPageN方法

热门标签

归档