【问题标题】:iTextsharp to protect PDF file with long passwordiTextsharp 用长密码保护 PDF 文件
【发布时间】:2017-09-15 09:41:28
【问题描述】:

我正在使用以下代码来保护使用 iTextsharp 库的 PDF 文件。

public Boolean ProtectPDF(String sourceFile, String newFile, String UserPassword, String OwnerPassword)
    {
        try
        {
            byte[] USER = System.Text.Encoding.ASCII.GetBytes(UserPassword);
            byte[] OWNER = System.Text.Encoding.ASCII.GetBytes(OwnerPassword);
            PdfReader reader = new PdfReader(sourceFile);
            PdfStamper stamper = new PdfStamper(reader, new FileStream(newFile, FileMode.Create));
            stamper.SetEncryption(USER, OWNER, PdfWriter.AllowPrinting, PdfWriter.ENCRYPTION_AES_128);
            stamper.Close();
            reader.Close();

            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

它适用于“短”密码,例如 1234567890ABCDE=GHIJ12

如果我尝试使用“长”密码,例如 2017DgFLcnODOy8=7D-+0|Fk/2?g-=02d^xz-d3s@2|WiuXjQJoRBU= ,我发现只有 前 32 个字符 被识别为密码,我输入的字符似乎无关紧要,但 PDF 文件仍会打开。

PDF 或 ITextsharp 库是否有任何限制,或者问题出在代码中?

请指教,谢谢。

【问题讨论】:

    标签: c# pdf itext


    【解决方案1】:

    这是 PDF 规范固有的限制,而不是 iText 的限制。

    这是 ISO 32000-1 的相关部分。它谈论的是一个 32 字节的字符串。

    ISO 32000-1 是您生成 PDF 1.7 文件时的规范。由于您仍然提到 iTextSharp(而不是用于 .NET 的 iText),我假设您使用的是旧的 iText 版本。

    几个月前,ISO 32000-2 发布,即 PDF 2.0。 iText 7.1 将支持 PDF 2.0。 PDF 2.0 将提供更长的密码(最多 48 个字节)。

    如果您使用的密码比规范中允许的长,iText 将忽略所有额外的字节。

    【讨论】:

    • 很高兴再次见到您,这是否意味着 PDF 仅将前 32 个字符识别为密码?
    • 我已经更新了我的答案,添加了 ISO 32000-1 的相关部分。一旦您决定要创建 PDF 2.0,您应该将您的 iText 版本升级到 iText 7。我们将在 7.1 版(即将发布)中支持 PDF 2.0。从那一刻起,您将被允许使用 48 字节的密码。
    • 感谢您的解释,我将决定是否升级到iText 7。
    • 请注意,7.1 尚未发布。我应该在到期时检查开发。
    猜你喜欢
    • 1970-01-01
    • 2013-07-14
    • 2015-04-25
    • 2012-09-05
    • 2017-11-17
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多