powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache POI - чтение запароленного Excel
13 сообщений из 13, страница 1 из 1
Apache POI - чтение запароленного Excel
    #38260585
bourne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если пароль в состоит из латинский букв и цифр, то всё хорошо.
Если кириллица, то org.apache.poi.EncryptedDocumentException, то есть пароль не подходит.

Сейчас ковыряюсь в самой либе, но там сам чёрт ногу сломит.
Кто-нибудь сталкивался?
...
Рейтинг: 0 / 0
Apache POI - чтение запароленного Excel
    #38260596
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полный stacktrace можно посмотреть?
...
Рейтинг: 0 / 0
Apache POI - чтение запароленного Excel
    #38260784
bourne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот пожалуйста. Я пользуюсь POI версии 3.8.
...
Рейтинг: 0 / 0
Apache POI - чтение запароленного Excel
    #38260822
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно. У вас точно пароль не ломается походу? В дебаггере проверьте ваш пароль. Возможно он где-то походу уже ломается. Если с ним всё ок, тогда я бы дебажил уже классы POI. Там encryption полностью свой реализован.
Классы Biff8EncryptionKey и RecordFactoryInputStream.
...
Рейтинг: 0 / 0
Apache POI - чтение запароленного Excel
    #38260851
bourne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да проверял, первым делом подозрения на кодировку пароля. Но в дебаге с паролем всё ок.
Сделал так на всякий случай
Код: java
1.
Biff8EncryptionKey.setCurrentUserPassword(new String(password.getBytes("UTF-8")));


но это не помогло.

Сейчас попробую написать тестик и поотлаживаться, без деплоя на сервер.
На ковыряние в POI очень много времени может уйти. Напишу им в комьюнити.
...
Рейтинг: 0 / 0
Apache POI - чтение запароленного Excel
    #38260907
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bourneСделал так на всякий случай
Код: java
1.
Biff8EncryptionKey.setCurrentUserPassword(new String(password.getBytes("UTF-8")));



Это вообще не то. Если пароль во время отладки видно нормально, то этот код может только его испортить. Уберите.
...
Рейтинг: 0 / 0
Apache POI - чтение запароленного Excel
    #38260919
bourne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так или иначе - не работает.

Есть файл с паролем "ййй" (без кавычек)

Пишу:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;

import java.io.*;

public class PasswordFileTest {
    public static void main(String[] args) throws IOException {

        File xlsFile = new File("C:\\excelFile.xls"); 

        try (InputStream is = new FileInputStream(xlsFile)) {

            Biff8EncryptionKey.setCurrentUserPassword("ййй");
            Workbook book = new HSSFWorkbook(is);
            System.out.println("Password ok!");

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}



получаю:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Exception in thread "main" org.apache.poi.EncryptedDocumentException: Supplied password is invalid for docId/saltData/saltHash
	at org.apache.poi.hssf.record.RecordFactoryInputStream$StreamEncryptionInfo.createDecryptingStream(RecordFactoryInputStream.java:116)
	at org.apache.poi.hssf.record.RecordFactoryInputStream.<init>(RecordFactoryInputStream.java:184)
	at org.apache.poi.hssf.record.RecordFactory.createRecords(RecordFactory.java:440)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:285)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:248)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:192)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:327)
	at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:308)
	at PasswordFileTest.main(PasswordFileTest.java:20)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)



Blazkowicz, попробуйте у себя запустить, если не сложно.
...
Рейтинг: 0 / 0
Apache POI - чтение запароленного Excel
    #38260943
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;

import java.io.*;

public class Test {
    public static void main(String[] args) throws IOException {

        File xlsFile = new File("excelFile.xls"); 
        InputStream is = new FileInputStream(xlsFile);
            Biff8EncryptionKey.setCurrentUserPassword("ййй");
            Workbook book = new HSSFWorkbook(is);
            System.out.println("Password ok!");

    }                           
}


Ну, это же тест. Надо было проще. И пароль не зависимо от текущей кодировки указать. Ошибка та же.
...
Рейтинг: 0 / 0
Apache POI - чтение запароленного Excel
    #38260951
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bourne,
так тоже не работает?
Код: java
1.
Biff8EncryptionKey.setCurrentUserPassword(new String(password.getBytes("UTF-8"), "cp1251"));
...
Рейтинг: 0 / 0
Apache POI - чтение запароленного Excel
    #38260952
bourne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Написал в мэйлинг лист POI. Посмотрим что там скажут.
...
Рейтинг: 0 / 0
Apache POI - чтение запароленного Excel
    #38260954
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е, наоборот

Код: java
1.
Biff8EncryptionKey.setCurrentUserPassword(new String(password.getBytes("cp1251"), "UTF-8"));
...
Рейтинг: 0 / 0
Apache POI - чтение запароленного Excel
    #38260955
bourne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лагман, увы
...
Рейтинг: 0 / 0
Apache POI - чтение запароленного Excel
    #38261086
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лагмантак тоже не работает?
Код: java
1.
Biff8EncryptionKey.setCurrentUserPassword(new String(password.getBytes("UTF-8"), "cp1251"));


Без шансов ни в какой кодировке не будет работать.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
package testpoi;

import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;

public class TestPOI {

    public static void main(String[] args) {
        for (char iy = 0; iy < Character.MAX_VALUE; ++iy) {
            if (iy % 1000 == 0) {
                System.out.println((int) iy);
            }
            try (InputStream is = new FileInputStream("excelFile.xls")) {
                char[] ch = {iy, iy, iy};
                Biff8EncryptionKey.setCurrentUserPassword(String.copyValueOf(ch));
                Workbook book = new HSSFWorkbook(is);
                System.out.println("Password ok! " + (int) iy);
            } catch (Exception e) {}
        }
    }
}
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Apache POI - чтение запароленного Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]