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

BadPasswordException:错误的用户密码

咸弘雅
2023-03-14

我正在使用以下代码创建一个加密的PDF文件:

Document document = new Document(
    new Rectangle(PageSize.A4.getWidth(), PageSize.A4.getHeight()));
PdfWriter writer = PdfWriter.getInstance(document,
    new FileOutputStream(RESULT1));
writer.setBoxSize("art", new Rectangle(36, 54, 555, 791));
writer.setEncryption("Vibhu".getBytes(), "Vibhu@123456789".getBytes(),
    PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128);
document.open();
// Creating Tables and Cells
document.close();

我省略了创建单元格和表格的代码,以及创建可以在其中输入firstname、lastname等值的表单的代码。

然后我这样操作表单。

private void manipulatePdf(String src, String dest, EclaimsVO eclaimsVO,
    String language) throws IOException, DocumentException {
    File file = new File(src);
    if (isObjectPresent(file)) {
        PdfReader reader = new PdfReader(src);
        PdfStamper stamper;
        stamper = new PdfStamper(reader, new FileOutputStream(dest),
                '\0', false);
        form = stamper.getAcroFields();
        addToForm("field_2", eclaimsVO.getName());
        addToForm("field_3", eclaimsVO.getSurName());
        stamper.close();
    }
}
com.itextpdf.text.exceptions.BadPasswordException: Bad user password
at com.itextpdf.text.pdf.PdfReader.readPdf(PdfReader.java:681)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:181)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:219)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:207)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:197)
writer.setEncryption("".getBytes(), "Vibhu@123456789".getBytes(),
            PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128);
PdfReader.unethicalreading = true;

共有1个答案

甘祺
2023-03-14

首先请允许我着重谈一些细节:

Document document = new Document(
    new Rectangle(PageSize.A4.getWidth(), PageSize.A4.getHeight()));

constanceA4是一个具有特定宽度和高度的矩形对象。您可以这样使用它:

Document document = new Document(PageSize.A4);

你为什么还要创建另一个矩形?新矩形(PageSize.a4.GetWidth(),PageSize.a4.GetHeight())PageSize.a4的等价物,那么为什么不直接使用PageSize.a4呢?

你为什么要定义一个艺术盒子?

Writer.SetBoxSize(“艺术”,新矩形(36,54,555,791));

通常没有什么理由去创建一个艺术盒子。为什么不把这一行去掉呢?

现在谈谈你问题的实质:

似乎您正在创建一个以后要填写的表单。如果此表单用于私人用途,为什么要html" target="_blank">加密表单?为什么不在填写的过程中加密呢?那不是简化了事情吗?

您正在做的工作的简短描述:

假设您确实想加密模板。在这种情况下,您知道所有者密码:

writer.setEncryption("Vibhu".getBytes(), "Vibhu@123456789".getBytes(),
    PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128);
writer.setEncryption("".getBytes(), "Vibhu@123456789".getBytes(),
    PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128);

你为什么要用这句话:

PdfReader.unethicalreading = true;

这一行是人们在不知道所有者密码的情况下使用的。但是,您知道所有者密码:它是“vibhu@123456789”

避免BadPasswordException的简单解决方案:

既然知道所有者密码,那么在阅读文档时就应该使用它。我在回答“如何使用所有者密码解密PDF文档”的问题时解释了这一点?

您应该更新创建阅读器对象的行,如下所示:

PdfReader reader = new PdfReader(src, "Vibhu@123456789".getBytes());

现在您将不再获得BadPasswordException并且可以安全地填写表单。

 类似资料:
  • 我有一个通过电子邮件验证设置的密码重置用户流。当我验证我们的广告群中不存在的电子邮件帐户时,出现了一个错误 出现错误“找不到此用户ID的帐户”。点击“Continue”(继续)会显示“Please wait while we process your information”(请稍候,我们正在处理您的信息)消息。 再次点击continue几次似乎会将我带到一个错误url,如:B2C\u 1\u R

  • 现在我想在UserPool中授权用户。我关注这个链接--https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html-client-side Authentication flow。但是“respondtoAuthChallenge”-返回No

  • 我正绞尽脑汁想弄清楚到底是怎么回事。 我正在尝试连接到ubuntu 19上postgres 11的本地安装。 < code>sudo -u postgres psql允许我作为用户postgres完全访问psql shell。我创建了一个新的用户和db,授予了权限,设置了密码,编辑了pg_hba.conf文件,并重启了服务器。我还确保了我的密码没有过期。 现在我希望<code>psql“host=

  • 我正在尝试解密服务器上的加密字符串。但当我解密的时候,我发现了错误。我需要成功解密字符串。我们正在使用AES 256 cbc 当我使用aes/cbc/nopadding时,我能够解密,但是文本中附加了垃圾字符。 解密A:2:{S:5:“电子邮件”;S:24:“afroj.alam@broc.com”;S:8:“密码”;S:7:“test123”;} 实际字符串A:2:{S:5:“email”;S:

  • 我试图访问我网站的索引页面:index。php,通过以下链接:localhost:80/web/index.php。这让我在chrome上看到一个空白页面,显示错误结果: 警告:SugarDateTime::setTime($hour,$minute,$sec=0)的声明应与C:\xamplep\htdocs\uat\include\SugarDateTime中的DateTime:($hours,

  • 在我更改MySQL服务器密码的过程中,我必须运行这行on命令 错误1045(28000):拒绝用户“odbc”@"localhost“的访问(使用密码:YES) 伙计们,请帮帮我。