Hello,

I am developing application and I use apache poi 3.8 to proceed 2003 and
2007 excel files. One feature that I use is reading each sheet's protection
hash and for 2003 file format I do it with following:

*HSSFWorkbook xlsWb=.....
xlsWb.getSheet(0).getPassword();*

Which works fine for *.xls file, but problem is that I am not able to get
same password hash for 2007 (*.xlsx) format file, because in order to read
*.xlsx file, I use following:

*XSSFWorkbook xssfw = new XSSFWorkbook(is);
xssfw.getSheetAt(0).... // It does not have getPassword() method*

But it does not have method getPassword(); or something which is used to get
password hash from sheet. I solved it with using java.util.zip.* with
following:

*
static int getHashedPassword(File file, int sheetIndex) throws Exception
    {
        String sheetName = "sheet" + (sheetIndex+1);
        InputStream is = new FileInputStream(file);
        ZipInputStream zis = new ZipInputStream(is);
        ZipEntry entry;

        while ((entry = zis.getNextEntry()) != null)
        {
            if
(entry.getName().toLowerCase().contains(sheetName.toLowerCase()))
            {
                break;
            }
        }

        int openTagSymbol = ((int) '<');
        int closeTagSymbol = ((int) '>');

        int character = zis.read();
        String password = "";

        while (character > 0)
        {
            String tag = "";
            if (character == openTagSymbol)
            {
                while (character != closeTagSymbol)
                {
                    character = zis.read();
                    tag += (char) character;
                }
                if (tag.contains("sheetProtection"))
                {
                    int index = tag.indexOf("password=") +
"password=".length() + 1;
                    char quotes = '\"';
                    for (int i = index;; i++)
                    {
                        char symbol = tag.charAt(i);
                        if (symbol == quotes)
                        {
                            break;
                        }
                        password += symbol;
                    }
                    break;
                }
            }
            character = zis.read();
        }

        return ((password.length() > 0) ? (Integer.parseInt(password, 16)) :
(-1));
    }
*

my question is: how can I get protection password hash from *.xlsx file with
using apache POI 3.8? Please give me some samples



--
View this message in context: 
http://apache-poi.1045710.n5.nabble.com/Reading-password-hash-from-xlsx-file-tp5710617.html
Sent from the POI - Dev mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@poi.apache.org
For additional commands, e-mail: dev-h...@poi.apache.org

Reply via email to