Работа с свойствами защиты паролем 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