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

Java使用poi为excel设置允许编辑范围密码,生成的excel提示密码不正确

子车俊哲
2023-03-14
    String pwd = "AB";
    byte[] decode = Hex.decodeHex(pwd.toCharArray());
    CTProtectedRange ctProtectedRange = sheet.getCTWorksheet().addNewProtectedRanges().addNewProtectedRange();
    ctProtectedRange.setName("protect");
    ctProtectedRange.setPassword(decode);
    System.out.println(ctProtectedRange); //get this string:<xml-fragment name="protect" password="AB"/>
    ctProtectedRange.setSqref(List.of("A1:D1"));
    sheet.protectSheet("1");

我能得到什么建议吗?

共有1个答案

白昊东
2023-03-14

CTProtectedRange.setPassword中使用的字节[]是16位密码验证器的字节,如2.3.7.1二进制文档密码验证器派生方法1所述。

这可以使用cryptoffunctions.createxorverifier1创建。注意,由于ist仅为16位,这实际上仅在short范围内返回int

然后可以使用java.nio.ByteBuffer创建字节[]

...
  String pwd = "AB";
  short pwdHash = (short)org.apache.poi.poifs.crypt.CryptoFunctions.createXorVerifier1(pwd);
  byte[] pwdHashBytes = java.nio.ByteBuffer.allocate(2).putShort(pwdHash).array();
  ctProtectedRange.setPassword(pwdHashBytes);
...
 类似资料:
  • 本文向大家介绍Java通过apache poi生成excel实例代码,包括了Java通过apache poi生成excel实例代码的使用技巧和注意事项,需要的朋友参考一下 首先,jar maven 添加依赖 开始以为是poi,然后就直接加poi的依赖,谁知道并没有所需要的类。查了查才发现是poi-ooxml 要用到的类 XSSFWorkbook , 代表一个excel文档 XSSFSheet ,

  • 我正在尝试创建一个创建密码的java程序,无论是所有小写、小写和大写、小写和大写和数字、小写和大写以及数字和标点符号,该程序还必须创建用户选择的密码之一,并且必须根据用户选择的内容生成密码长度。我已经生成了密码选项供用户选择,并提示他选择一个。我现在被困在如何创建上面提到的密码类型上。一个人建议我使用ASCII值,然后将它们转换为文本。我知道如何将它们转换为文本,但它会显示数字、字母和标点符号。有

  • 我试图修改一个excel文件,但由于某种原因,我不理解cell.SetCellValue方法在我的代码中不起作用。我实际上正在做的是:-我正在打开一个excel文件,并将感兴趣的内容保存在一个HashMap中。这样工作,我可以打印HashMap的内容。-然后,我试图用保存在HashMap中的数据修改另一个excel文件,但由于某种原因,这没有发生。 请帮忙,谢谢!

  • <?php $pw='simplewind'; $afpw=sp_password($pw);//加密字符串 echo $afpw;//输出加密后的字符串 ?>

  • 我使用Apache POI框架生成了一个xlsx密码保护文件,下面添加了我的代码。然而,我无法使用Excel工具打开生成的文件。我可以使用Plan Maker免费工具打开它。欢迎任何建议。 我有以下jars使用,commons-collections4-4.4.jar,commons-compress-1.20.jar,commons-math3-3.0.jar,poi-4.1.2.jar,poi

  • 问题内容: 我有一个受密码保护的Excel电子表格。我需要打开此电子表格并从中读取数据。我一直在尝试使用POI API无济于事。首选Java解决方案,但任何想法都会有所帮助。 编辑:是的,我有密码。该文件在excel中受密码保护;必须输入密码才能查看电子表格。 Edit2:我无法使用带有密码的POI打开它,我在寻找替代解决方案。 问题答案: 您可以使用JExcelApi。 自从我这样做已经有一段时