Защита презентаций паролем в JavaScript

Обзор

Пароль открытия шифрует презентацию. Правильный пароль требуется для загрузки и просмотра содержимого презентации, поэтому эта защита обеспечивает конфиденциальность.

Пароль открытия отличается от пароля защиты от записи. Защита от записи ограничивает изменение, но не шифрует содержимое и не препятствует загрузке презентации. Для управления паролями при изменении презентаций см. Write-Protect Presentations.

Приведённые ниже сценарии применимы как к презентациям PPT, так и PPTX. Примеры используют оба формата, где важны их поведение при работе с файлами и потоками.

Зашифровать презентацию паролем открытия

Используйте ProtectionManager.encrypt для назначения пароля открытия. Затем используйте Presentation.save для сохранения зашифрованной презентации.

Следующий пример шифрует презентацию PPTX:

const slides = require("aspose.slides.via.java");

const presentation = new slides.Presentation("pres.pptx");
try {
    presentation.getProtectionManager().encrypt("open_password");
    presentation.save("encrypted-pres.pptx", slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Сделать свойства документа общедоступными

По умолчанию Aspose.Slides включает свойства документа в шифрование презентации. Метод ProtectionManager.setEncryptDocumentProperties управляет этим поведением независимо от шифрования содержимого слайдов. Перед вызовом ProtectionManager.encrypt передайте false, если система индексации, классификации, поиска или управления документами должна читать метаданные без пароля открытия.

Следующий пример создаёт зашифрованную презентацию PPTX, оставляя её встроенные свойства документа общедоступными:

const slides = require("aspose.slides.via.java");

const presentation = new slides.Presentation();
try {
    const properties = presentation.getDocumentProperties();
    properties.setAuthor("Contoso Knowledge Management");
    properties.setTitle("Quarterly Product Roadmap");
    properties.setKeywords("roadmap, planning, internal");

    presentation.getSlides().get_Item(0).setName("Encrypted presentation content");
    presentation.getProtectionManager().setEncryptDocumentProperties(false);
    presentation.getProtectionManager().encrypt("open_password");
    presentation.save("public-properties-encrypted.pptx", slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Передача false в ProtectionManager.setEncryptDocumentProperties не делает слайды, шаблоны, макеты, фигуры, медиа‑файлы или другое содержимое презентации общедоступными. Это влияет только на свойства документа. Чтобы читать эти свойства без загрузки зашифрованного содержимого, см. Manage Presentation Properties.

Загрузка зашифрованной презентации

Установите LoadOptions.setPassword в значение пароля открытия и передайте параметры в Presentation при загрузке файла. Загрузка завершается ошибкой, когда требуется пароль открытия, но предоставленный пароль отсутствует или неверен.

const slides = require("aspose.slides.via.java");

const loadOptions = new slides.LoadOptions();
loadOptions.setPassword("open_password");

const presentation = new slides.Presentation("encrypted-pres.pptx", loadOptions);
try {
    // Работать с расшифрованной презентацией.
} finally {
    presentation.dispose();
}

Удалить шифрование из презентации

Загрузите презентацию с её паролем открытия, вызовите ProtectionManager.removeEncryption и сохраните результат. Сохранённую презентацию затем можно загрузить без пароля.

const slides = require("aspose.slides.via.java");

const loadOptions = new slides.LoadOptions();
loadOptions.setPassword("open_password");

const presentation = new slides.Presentation("encrypted-pres.pptx", loadOptions);
try {
    presentation.getProtectionManager().removeEncryption();
    presentation.save("encryption-removed.pptx", slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Проверка пароля открытия перед загрузкой

Используйте PresentationFactory.getPresentationInfo для получения PresentationInfo без создания полного экземпляра презентации. Проверьте PresentationInfo.isPasswordProtected перед запросом или проверкой пароля. Когда защита присутствует, проверьте переданное значение с помощью PresentationInfo.checkPassword.

Сценарий с указанием пути к файлу

Следующий пример проверяет пароль открытия для файла PPTX, передаёт подтверждённое значение в LoadOptions.setPassword и затем загружает полную презентацию:

const slides = require("aspose.slides.via.java");

const filePath = "protected-presentation.pptx";
const password = "open_password";
const presentationInfo = slides.PresentationFactory.getInstance().getPresentationInfo(filePath);

if (!presentationInfo.isPasswordProtected()) {
    console.log("The presentation does not have an opening password.");
} else if (!presentationInfo.checkPassword(password)) {
    console.log("The opening password is incorrect.");
} else {
    const loadOptions = new slides.LoadOptions();
    loadOptions.setPassword(password);

    const presentation = new slides.Presentation(filePath, loadOptions);
    try {
        console.log("The presentation was validated and loaded successfully.");
    } finally {
        presentation.dispose();
    }
}

Сценарий с потоком

Используйте PresentationFactory.getPresentationInfoFromStream для анализа читаемого потока Node.js. После того как поток проверки будет использован, создайте новый поток перед загрузкой полной презентации с помощью Presentation.createPresentationFromStream.

Следующий пример использует файл PPT:

const slides = require("aspose.slides.via.java");
const fs = require("fs");

const filePath = "protected-presentation.ppt";
const password = "open_password";
const presentationFactory = slides.PresentationFactory.getInstance();
const infoStream = fs.createReadStream(filePath);

slides.PresentationFactory.getPresentationInfoFromStream(presentationFactory, infoStream, function(infoError, presentationInfo) {
    if (infoError) {
        console.log("The presentation information could not be read: " + infoError.message);
    } else if (!presentationInfo.isPasswordProtected()) {
        console.log("The presentation does not have an opening password.");
    } else if (!presentationInfo.checkPassword(password)) {
        console.log("The opening password is incorrect.");
    } else {
        const loadOptions = new slides.LoadOptions();
        loadOptions.setPassword(password);
        const presentationStream = fs.createReadStream(filePath);

        slides.Presentation.createPresentationFromStream(presentationStream, loadOptions, function(loadError, presentation) {
            if (loadError) {
                console.log("The presentation could not be loaded: " + loadError.message);
            } else {
                try {
                    console.log("The presentation was validated and loaded successfully.");
                } finally {
                    presentation.dispose();
                }
            }
        });
    }
});

Возвращаемые значения checkPassword

PresentationInfo.checkPassword возвращает true только когда у презентации установлен пароль открытия и предоставленный пароль верен. Он возвращает false в каждом из следующих случаев:

  • Пароль неверен.
  • У презентации нет пароля открытия.
  • Предоставленный пароль null или пустой.

Поведение одинаково для презентаций PPT и PPTX.

Проверка, зашифрована ли загруженная презентация

После загрузки презентации с правильным паролем проверьте ProtectionManager.isEncrypted, чтобы подтвердить, что исходная презентация была зашифрована. Чтобы обнаружить защиту паролем открытия до загрузки, используйте PresentationInfo.isPasswordProtected, как показано выше.

const slides = require("aspose.slides.via.java");

const loadOptions = new slides.LoadOptions();
loadOptions.setPassword("open_password");

const presentation = new slides.Presentation("encrypted-pres.pptx", loadOptions);
try {
    const isEncrypted = presentation.getProtectionManager().isEncrypted();
    console.log("The presentation is encrypted: " + isEncrypted);
} finally {
    presentation.dispose();
}

Рекомендации по безопасности

Защитить презентацию паролем онлайн

  1. Откройте приложение Aspose.Slides Lock.
  2. Выберите или загрузите презентацию.
  3. Введите пароль для защиты просмотра.
  4. При необходимости введите отдельный пароль для защиты редактирования.
  5. Примените защиту и скачайте полученный файл.

FAQ

В чём разница между паролем открытия и паролем защиты от записи?

Пароль открытия шифрует презентацию и требуется для загрузки её содержимого. Пароль защиты от записи ограничивает изменение без шифрования содержимого.

Можно ли проверить пароль открытия без загрузки всех слайдов?

Да. Получите информацию о презентации, проверьте наличие защиты паролем открытия и проверьте пароль до создания полного экземпляра презентации.

Может ли приложение читать метаданные без пароля открытия?

Да, но только когда презентация зашифрована с отключённым шифрованием свойств документа. В этом случае приложение должно использовать режим загрузки только свойств документа, описанный в Manage Presentation Properties.

Поддерживают ли сценарии проверки пароля как PPT, так и PPTX?

Да. Обнаружение и проверка пароля по пути к файлу и по потоку работают одинаково для презентаций PPT и PPTX.