Работа с свойствами защиты паролем PST

Проверка на защиту паролем

Значение MapiPropertyTag.PR_PST_PASSWORD из класса MapiPropertyTag используется для проверки, защищён ли файл паролем.

CRC-32 хеш строки пароля хранится в свойстве PidTagPstPassword (tag = 0x67ff0003) в MessageStore. Если это свойство существует и его значение не ноль, то PST защищён паролем.

Следующий фрагмент кода показывает, как проверить, защищён ли файл PST паролем, и является ли данная строка допустимым паролем для этого PST.

Ниже приведённый фрагмент кода демонстрирует две функции: первая проверяет, защищён ли PST паролем, а вторая показывает, как проверить, является ли предоставленный пароль правильным или нет.

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

Удаление/Сброс свойства PR_PST_PASSWORD

Удалить свойство PR_PST_PASSWORD нельзя так же, как удаляются другие свойства из хранилища сообщений. Вместо этого мы должны установить его значение в ноль (0), чтобы удалить его. Свойство “Store” класса PST предоставляет доступ к свойствам хранилища PST, а не к MessageStoreProperties PST в этом случае.

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

Установка/Изменение пароля PST

Следующий фрагмент кода показывает, как установить пароль на файлы 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);
}

Проверка пароля для защищённых паролем файлов PST

Aspose.Email позволяет разработчикам проверять, защищён ли файл PST паролем, и проверять, является ли введённый пароль правильным или нет. Для этого API предоставляет свойство PersonalStorage.Store.IsPasswordProtected и метод PersonalStorage.Store.IsPasswordValid(). Свойство PersonalStorage.Store.IsPasswordProtected возвращает true, если файл PST защищён паролем, и false, если нет. Метод PersonalStorage.Store.IsPasswordValid() принимает строку пароля в качестве параметра и возвращает true, если пароль правильный, и false, если он неверный.

Следующий фрагмент кода демонстрирует использование свойства PersonalStorage.Store.IsPasswordProtected и метода PersonalStorage.Store.IsPasswordValid().

Пример кода

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

Консольный вывод

Хранилище защищено паролем - True Пароль действителен - True