当前位置: 首页 > 知识库问答 >
问题:

iTextSharp read PDF with AES加密引发异常

邓宜年
2023-03-14

我正在尝试用itextsharp打开一个用AES 256加密的PDF并显示它。PDF也是用itextsharp加密的。我使用的是iTextSharp 5.5.0.0。如果加密设置为“标准加密”,则此代码有效。

在内部“using”的关闭括号上引发异常:算术运算导致溢出。

string path = Server.MapPath("~/App_Data/pdf/foo.pdf");
string password = "openSesame";

Response.Clear();
Response.ClearHeaders();
Response.AddHeader("Expires", "0");
Response.AddHeader("Cache-Control", "private");
Response.AddHeader("content-disposition", "inline");
Response.ContentType = "application/pdf";

using (MemoryStream memoryStream = new MemoryStream())
{
    using (PdfReader reader = new PdfReader(path, Encoding.UTF8.GetBytes(password)))
    using (PdfStamper stamper = new PdfStamper(reader, memoryStream))
    {
    }

    Response.BinaryWrite(memoryStream.GetBuffer());
}

Response.End();

更新(忘记加密代码):

using (FileStream fileStream = new FileStream(path, FileMode.Create))
{
    PdfCopyFields copy = new PdfCopyFields(fileStream);
    var bytes = Encoding.UTF8.GetBytes(password);
    copy.SetEncryption(bytes, bytes, 0, PdfWriter.ENCRYPTION_AES_256);

    // add some documents with 'copy.AddDocument()';

    copy.Close();
}

我是不是漏掉了什么?

共有1个答案

吴驰
2023-03-14

下面是一个简单的示例,它可以使用256位AES加密对PDF进行加密:

var openDialog = new OpenFileDialog();
openDialog.DefaultExt = "pdf";
if (openDialog.ShowDialog() == true)
{
    using (var input = openDialog.OpenFile())
    {
        var saveDialog = new SaveFileDialog();
        saveDialog.DefaultExt = "pdf";
        if (saveDialog.ShowDialog() == true)
        {
            using (var reader = new PdfReader(input)) 
            {
                using (var output = saveDialog.OpenFile())
                {
                    PdfEncryptor.Encrypt(
                        reader, output,
                        PdfWriter.ENCRYPTION_AES_256,
                        "password", "password",
                        PdfWriter.ALLOW_PRINTING);
                }
            }
        }

    }
}
 类似资料:
  • 下面是我的加密方法(值是一个输入参数): 下面是我的解密方法(值是一个输入参数): 我有个例外: 我读过不同的主题,所以我发现,当没有填充和有另一种密码模式时,就会发生这种异常。那么,怎么了?

  • 我正在尝试使用“AES/GCM/Nopadding”加密一个简单的测试“Sometext”。 我有一个main方法,首先传递一个字符串作为参数,该参数应该被加密。加密的文本将出现在控制台上。然后,调用解密(通过传递加密文本)来检查解密是否正常,即解密后是否返回相同的文本。我正在调用主类,但它在我的自定义方法中失败,出现异常: 我不确定为什么这个非法密钥大小给出错误。我的密钥“secretkey”在

  • 你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。 如何引发异常 例13.2 如何引发异常 #!/usr/bin/python # Filename: raising.py classShortInputException(Exception):     '''A u

  • 当我开始我的申请时,它给了我下面提到的异常。我正在使用加密存储类,但不知道为什么会有这个异常,即使我现在没有访问任何存储类。请引导。 [EDT]0:0:0,32-Exception:java.io.eofException-null java.io.eofException at java.io.datainputstream.readfilly(datainputstream.java:197)

  • 问题内容: 鉴于此Java 8代码 我们如何正确地将其委派给方法调用的堆栈?(简而言之,如何使此方法抛出此错误?) Java中的Lambda看起来对错误处理不是很友好… 问题答案: 我的方法是从lambda 偷偷地 将其抛出,但是要小心,使该方法在其子句中声明它。使用我在这里发布的课程: 这样,您可以有效地使编译器仅“移开视线”,从而在代码中的某个位置禁用其异常检查,但是通过在方法中声明异常,可以

  • 我使用正则表达式来查找一个字符串是否存在于一个书页中。下面是相同的代码。 观察: > 案例1:当searchText=“(222M)”时 结果:找到字符串。 案例2:当search chText="(222M"//缺少括号时 我得到以下例外。 索引22:.\b.{0}(1110r.{附近regexp模式中嵌套的括号不正确。{0}.\b 还有更好的在页面中查找字符串的选项。使用String.cont