问题
I am using the open source library java-libpst to parse a outlook pst
file.before parsing I want to know if the file is password protected or not.The problem us that this library opens password protected files without password,so I did not find any way to check if the file is password protected.
I can use any other java library for this purpose,provided they are open source.
回答1:
Do not know any open source java library for .pst file, but there is commercial library JPST. We used it to read .pst files. The library was able to read password hash from .pst file. As I remember password is stored in MessageStore object.
Password is not used to encrypt .pst file content. Any application or library can read Outlook .pst file without to know password.
回答2:
In password protected pst files, ,nothing is actually encrypted .The Password of a pst file is stored against identifier 0x67FF.If there is no password the value stored is 0x00000000.This password is matched by outlook while opening pst file.Due to this reason,The java library java-libpst can also access all contents of password protected files without the actual need of password.
To check if the file is password protected,using java-libpst use this:
/**
* checks if a pst file is password protected
*
* @param file - pst file to check
* @return - true if protected,false otherwise
*
* pstfile has the password stored against identifier 0x67FF.
* if there is no password the value stored is 0x00000000.
*/
private static boolean ifProtected(PSTFile file,boolean reomovePwd){
try {
String fileDetails = file.getMessageStore().getDetails();
String[] lines = fileDetails.split("\n");
for(String line:lines){
if(line.contains("0x67FF")){
if(line.contains("0x00000000"))
return false;
else
return true;
}
}
} catch (PSTException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
来源:https://stackoverflow.com/questions/15124834/check-if-a-pst-file-is-password-protected-with-java-libpst