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