Trabajando con las propiedades de protección de contraseña de PST
Verificar la protección con contraseña
El valor de MapiPropertyTag.PR_PST_PASSWORD de la clase MapiPropertyTag se utiliza para comprobar si un archivo está protegido con contraseña.
El hash CRC-32 de la cadena de la contraseña se almacena en la propiedad PidTagPstPassword (tag = 0x67ff0003) en MessageStore. Si esta propiedad existe y no es cero, entonces el PST está protegido por contraseña.
El siguiente fragmento de código muestra cómo comprobar si un archivo PST está protegido por contraseña y si la cadena dada es una contraseña válida para ese PST.
El fragmento de código a continuación muestra dos funciones, la primera comprueba si el PST está protegido por contraseña, y la segunda muestra cómo verificar si una contraseña proporcionada es correcta o no.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java | |
private static boolean isPasswordProtected(PersonalStorage pst) { | |
// If the property exists and is nonzero, then the PST file is password protected. | |
if (pst.getStore().getProperties().contains(MapiPropertyTag.PR_PST_PASSWORD)) { | |
long passwordHash = pst.getStore().getProperties().get_Item(MapiPropertyTag.PR_PST_PASSWORD).getLong(); | |
return passwordHash != 0; | |
} | |
return false; | |
} | |
private static boolean isPasswordValid(String password, PersonalStorage pst) { | |
// If the property exists and is nonzero, then the PST file is password protected. | |
if (pst.getStore().getProperties().contains(MapiPropertyTag.PR_PST_PASSWORD)) { | |
// The property value contains the CRC-32 hash of the password string of PST. | |
long passwordHash = pst.getStore().getProperties().get_Item(MapiPropertyTag.PR_PST_PASSWORD).getLong(); | |
CRC32 crc = new CRC32(); | |
crc.update(password.getBytes()); | |
return passwordHash != 0 && passwordHash == crc.getValue(); | |
} | |
return false; | |
} |
Eliminar/Restablecer la propiedad PR_PST_PASSWORD
La eliminación de la propiedad PR_PST_PASSWORD no se puede lograr como se eliminan otras propiedades de un almacén de mensajes. En su lugar, necesitamos establecer su valor en cero (0) para que se elimine. La propiedad “Store” de la clase PST permite el acceso a las propiedades del almacén de PST en lugar de las MessageStoreProperties de PST en este caso.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java | |
public static void PSTPasswordRemove() { | |
PersonalStorage pst = PersonalStorage.fromFile(dataDir + "PersonalStorage.pst"); | |
if (pst.getStore().getProperties().contains(MapiPropertyTag.PR_PST_PASSWORD)) { | |
MapiProperty property = new MapiProperty(MapiPropertyTag.PR_PST_PASSWORD, getBytes((int) 0)); | |
pst.getStore().setProperty(property); | |
} | |
} | |
//Helper method | |
public static byte[] getBytes(int value) { | |
ByteBuffer buffer = ByteBuffer.allocate(4).order(ByteOrder.nativeOrder()); | |
buffer.putInt(value); | |
return buffer.array(); | |
} |
Establecer/Cambiar la contraseña de PST
El siguiente fragmento de código muestra cómo establecer una contraseña en archivos PST.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java | |
PersonalStorage pst = PersonalStorage.create(dataDir + "PersonalStorage_out.pst", FileFormatVersion.Unicode); | |
{ | |
// Set the password | |
String password = "Password1"; | |
pst.getStore().changePassword(password); | |
// Remove the password | |
pst.getStore().changePassword(null); | |
} |
Verificación de contraseña para archivos PST protegidos por contraseña
Aspose.Email permite a los desarrolladores comprobar si el archivo PST está protegido por contraseña y verificar si la contraseña dada es correcta o no. Para esto, la API proporciona la propiedad PersonalStorage.Store.IsPasswordProtected y el método PersonalStorage.Store.IsPasswordValid(). La propiedad PersonalStorage.Store.IsPasswordProtected devuelve true si el archivo PST está protegido por contraseña y false si no lo está. El método PersonalStorage.Store.IsPasswordValid() toma la cadena de la contraseña como parámetro y devuelve true si la contraseña es correcta y false si es incorrecta.
El siguiente fragmento de código demuestra el uso de la propiedad PersonalStorage.Store.IsPasswordProtected y el método PersonalStorage.Store.IsPasswordValid().
Código de ejemplo
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java | |
PersonalStorage pst = PersonalStorage.fromFile(dataDir + "passwordprotectedPST.pst"); | |
System.out.println("The storage is password protected - " + pst.getStore().isPasswordProtected()); | |
System.out.println("Password is valid - " + pst.getStore().isPasswordValid("Password1")); | |
pst.dispose(); |
Salida de consola
El almacenamiento está protegido por contraseña - Verdadero La contraseña es válida - Verdadero