Trabalhando com Propriedades de Proteção por Senha de PST

Verificar a Proteção por Senha

O valor MapiPropertyTag.PR_PST_PASSWORD da classe MapiPropertyTag é usado para verificar se um arquivo está protegido por senha.

O hash CRC-32 da string da senha é armazenado na propriedade PidTagPstPassword (tag = 0x67ff0003) na MessageStore. Se essa propriedade existir e for diferente de zero, então o PST está protegido por senha.

O seguinte trecho de código mostra como verificar se um arquivo PST está protegido por senha e se a string fornecida é uma senha válida para esse PST.

O trecho de código abaixo mostra duas funções, a primeira verifica se o PST está protegido por senha e a segunda mostra como verificar se uma senha fornecida está correta ou não.

// 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;
}

Remover/Redefinir a Propriedade PR_PST_PASSWORD

A remoção da propriedade PR_PST_PASSWORD não pode ser realizada como outras propriedades são removidas de um repositório de mensagens. Em vez disso, precisamos definir seu valor como zero (0) para que ela seja removida. A propriedade “Store” da classe PST permite acesso às propriedades de armazenamento do PST em vez das MessageStoreProperties do PST neste 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();
}

Definir/Mudar a Senha do PST

O seguinte trecho de código mostra como definir uma senha em arquivos 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);
}

Verificação de Senha para Arquivos PST Protegidos por Senha

Aspose.Email permite que os desenvolvedores verifiquem se o arquivo PST está protegido por senha e se a senha fornecida está correta ou não. Para isso, a API fornece a propriedade PersonalStorage.Store.IsPasswordProtected e o método PersonalStorage.Store.IsPasswordValid(). A propriedade PersonalStorage.Store.IsPasswordProtected retorna true se o arquivo PST estiver protegido por senha e false se não estiver. O método PersonalStorage.Store.IsPasswordValid() que recebe a senha como string como parâmetro e retorna true se a senha estiver correta e false se estiver incorreta.

O seguinte trecho de código demonstra o uso da propriedade PersonalStorage.Store.IsPasswordProtected e do método PersonalStorage.Store.IsPasswordValid().

Código de Exemplo

// 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();

Saída do Console

O armazenamento está protegido por senha - Verdadeiro
A senha é válida - Verdadeiro