У меня есть файл xlsx из excel 2013 с защитой паролем. У меня есть пароль, и я пытался его расшифровать.
public static Boolean isWorkbookPasswordValid(File file, String xlsWorkGroupPassword) throws IOException, GeneralSecurityException {
InputStream is = null;
FileOutputStream fileOut = null;
Workbook wb;
try {
wb = WorkbookFactory.create(new FileInputStream(file), xlsWorkGroupPassword);
} catch (Exception e1) {
// ...
}
}
и запустив приведенный выше код, я получил эту ошибку:
org.apache.poi.EncryptedDocumentException: Export Restrictions in place - please install JCE Unlimited Strength Jurisdiction Policy files
at org.apache.poi.poifs.crypt.CryptoFunctions.getCipher(CryptoFunctions.java:208)
at org.apache.poi.poifs.crypt.CryptoFunctions.getCipher(CryptoFunctions.java:182)
at org.apache.poi.poifs.crypt.agile.AgileDecryptor.hashInput(AgileDecryptor.java:269)
at org.apache.poi.poifs.crypt.agile.AgileDecryptor.verifyPassword(AgileDecryptor.java:116)
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:95)
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:206)
at
Чтение онлайн:
поэтому я скачал JCE с здесь и скопировал его в каталог домашней безопасности Java.
и попытался запустить снова - и я получил ту же ошибку.
Я также попробовал этот код, и он дал мне такое же исключение.
POIFSFileSystem fs = new POIFSFileSystem(is);
EncryptionInfo info = new EncryptionInfo(fs);
Decryptor d = Decryptor.getInstance(info);
d.verifyPassword(xlsWorkGroupPassword)
добавление этого свойства также ничего не сделало:
Security.setProperty("crypto.policy", "unlimited");
насколько я понимаю, excel 2013 шифрует файл по этим параметрам:
keyBits="256",hashAlgorithm="SHA512"
и проблема в keyBits
. Кто-нибудь имел и решил эту проблему?