C# &引用;“至少有一个签名无效”;

C# &引用;“至少有一个签名无效”;,c#,itext,C#,Itext,我正在尝试使用itextsharp对pdf进行数字签名,而不生成物理文件。我正在将我的rdlc数据转换成字节,并尝试对其进行数字签名。当我创建物理文件并对该文件进行签名时,它已正确签名,但当我尝试登录memorystream而不在任何位置生成物理文件时,我会遇到此错误 至少有一个签名无效 我认为问题在于这一行 var ms = new MemoryStream(10 * 1024) 分析示例PDF问题的原因是OP签名的PDF被加密,而嵌入的签名容器也被加密 虽然ISO 32000-1在这方

我正在尝试使用itextsharp对pdf进行数字签名,而不生成物理文件。我正在将我的rdlc数据转换成字节,并尝试对其进行数字签名。当我创建物理文件并对该文件进行签名时,它已正确签名,但当我尝试登录memorystream而不在任何位置生成物理文件时,我会遇到此错误

至少有一个签名无效

我认为问题在于这一行

var ms  = new MemoryStream(10 * 1024)


分析示例PDF问题的原因是OP签名的PDF被加密,而嵌入的签名容器也被加密

虽然ISO 32000-1在这方面有点混乱,但ISO 32000-2明确规定,不得对嵌入式签名容器进行加密。(您可以在一个有关验证加密PDF中签名的相关问题中详细了解这一点。)

在就此发表评论后,OP确认:

删除PdfEncryptor代码后,现在我没有收到任何错误


请共享一个由您的代码签名的示例pdf进行分析。@mkl截图附在“错误”上方@Aalok mkl要求提供示例pdf,而不是错误截图。截图不是示例pdf。通常在创建pdf签名出现问题的情况下,通过快速分析签名的pdf本身,可以明确在何处查找错误。OK。我今天晚些时候在办公室的时候会查这个文件。
public static byte[] SignPdfFileMemory(byte[] bytes)
    {
        
        Stream stream = File.OpenRead(HttpContext.Current.Server.MapPath("SantoshKumar - Copy.pfx"));
        Pkcs12Store pk12 = new Pkcs12Store(stream, "1234".ToCharArray());
        stream.Dispose();
        string alias = null;
        foreach (string tAlias in pk12.Aliases)
        {
            if (pk12.IsKeyEntry(tAlias))
            {
                alias = tAlias;
                break;
            }
        }
        var pk = pk12.GetKey(alias).Key;
        iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(bytes);
        using (var ms  = new MemoryStream(10 * 1024))
        {
            using (iTextSharp.text.pdf.PdfStamper stamper = iTextSharp.text.pdf.PdfStamper.CreateSignature(reader, ms, '\0'))
            {
                iTextSharp.text.pdf.PdfSignatureAppearance appearance = stamper.SignatureAppearance;                    
                appearance.Reason = "MUMBAI";
                appearance.Location = "TEST";
                appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(20, 10, 170, 60),2 , "Icsi-Vendor");
                iTextSharp.text.pdf.security.IExternalSignature es = new iTextSharp.text.pdf.security.PrivateKeySignature(pk, "SHA-256");
                iTextSharp.text.pdf.security.MakeSignature.SignDetached(appearance, es, new Org.BouncyCastle.X509.X509Certificate[] { pk12.GetCertificate(alias).Certificate }, null, null, null, 0, iTextSharp.text.pdf.security.CryptoStandard.CMS);
                stamper.Close();
            }
            return ms.ToArray();
        }
       
        }