Как использовать хешированные пароли с защищенными паролем PDF-файлами SETAPDF?

Я использую API под названием SET-PDF Stamper.

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

Наш хеш использует следующий password_hash("password", CRYPT_BLOWFISH, $options); Обычно в этой ситуации вы бы использовали проверку пароля, но я не вижу способа реализовать это с помощью setasign API.


person g4ost    schedule 04.06.2020    source источник
comment
Нельзя ли получить ввод от пользователя, хешировать его, а затем использовать этот хеш в качестве пароля как при создании файла, так и при его открытии?   -  person HoldOffHunger    schedule 04.06.2020
comment
Ваш вопрос немного сложно понять; Итак, у вас есть зашифрованный файл PDF, который вам нужно расшифровать, прежде чем ваш PHP сможет отредактировать файл?   -  person Martin    schedule 04.06.2020
comment
@martin извините за это, у меня есть хешированные пароли, но я хочу использовать этот API для создания защищенного паролем PDF-файла, используя этот хешированный пароль. Я надеюсь, что это проясняет то, что я пытаюсь выполнить.   -  person g4ost    schedule 04.06.2020
comment
@ g4ost, вы не должны использовать хэш в качестве пароля. Особенно, если хэш подлинного пароля!   -  person Martin    schedule 04.06.2020
comment
@Martin Да, я прочитал руководства, но мои пароли, которые я использую из базы данных, хэшируются. Когда пользователь вводит его в поле пароля, он не будет соответствовать хешированному паролю, похоже, что seta-pdf поддерживает только шифрование пароля, но ничего не говорит о хэшировании пароля.   -  person g4ost    schedule 04.06.2020
comment
@HoldOffHunger Невозможно проверить хэш при создании и открытии файла PDF? Есть ли какие-либо альтернативные безопасные варианты, которые я мог бы сделать?   -  person g4ost    schedule 04.06.2020
comment
Привет, g4st: я не уверен, что использование хэш-пароля идеально подходит для шифрования pdf. Но почему нельзя проверить хэш? hash('hello') = 123 сегодня, и завтра, и послезавтра, не так ли? (или любые другие числа). Если вы шифруете с помощью хэша, просто расшифруйте его с помощью того же хэша, и вы можете сделать этот хэш с помощью пароля в любом месте и в любое время, если у вас есть пароль и т. д.   -  person HoldOffHunger    schedule 04.06.2020
comment
g4st: Я должен упомянуть, что ХЕШИРОВАНИЕ является ОДНОСТОРОННИМ. Вы не можете проверить хэш без исходных данных. Может быть, вы путаете ХЕШИРОВАНИЕ с ШИФРОВАНИЕМ?   -  person HoldOffHunger    schedule 04.06.2020
comment
@HoldOffHunger, вы ошибаетесь в отношении повторяющегося характера хэшей; насчет солей. Каждый хэш пароля использует соли, чтобы избежать повторения, которое вы здесь иллюстрируете. Поэтому один и тот же пароль будет давать многочисленные хэши из-за солей.   -  person Martin    schedule 04.06.2020
comment
@g4ost ; если вы хотите защищенный паролем PDF-файл, тогда пользователь сам должен установить пароль в поле ввода, которое вы затем можете использовать в качестве ключа шифрования открытого текста. Если пользователь хочет использовать тот же пароль, что и у вас, в качестве хэша БД, или нет, это его выбор, а не ваш.   -  person Martin    schedule 04.06.2020
comment
@g4ost g4ost, если ВЫ хотите сделать этот выбор для пользователя, просто вручную установите пароль (например, его имя пользователя или какое-либо другое значение открытого текста) и используйте его - просто и легко.   -  person Martin    schedule 04.06.2020
comment
@HoldOffHunger API не показывает способ проверки хеша при открытии файла PDF из того, что я видел в документации. Кроме того, под проверкой хэша я имел в виду использование password_verify($password, $password_hash) для определения правильности пароля. В настоящее время система входа работает именно так. Чтобы часть PDF работала, мне придется прибегнуть к созданию зашифрованных паролей вместо хеширования? Также не будет ли это менее безопасным, чем использование хэша?   -  person g4ost    schedule 04.06.2020
comment
@HoldOffHunger ; Спасибо; Я хорошо знаю соль и гашиш. Хэш с PHP password_hash генерируется с открытым текстом пароля и солью. Это означает, что один и тот же открытый текст создает много разных хэшей с помощью этого метода. Это означает, что ваш предыдущий комментарий о повторении хэша здесь не работает.   -  person Martin    schedule 04.06.2020


Ответы (1)


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

Стандартные алгоритмы шифрования PDF начинаются с простого текстового пароля.

Вы ничего не можете с этим поделать, кроме как написать собственную логику для средства просмотра PDF (например, pdf.js), чтобы изменить ввод (хэшировать его) до того, как он будет передан алгоритму, вычисляющему ключ шифрования.

person Jan Slabon    schedule 04.06.2020
comment
Я изучал это, и вместо хеширования паролей в нашей базе данных мы должны использовать шифрование? Таким образом, по крайней мере, мы могли бы расшифровать руководства, защищенные паролем. Это единственное решение, которое я вижу работающим. - person g4ost; 04.06.2020
comment
Я не уверен, действительно ли вы хотите знать пароли ваших пользователей? Вы можете просто повторно запросить пароль, сверить его с сохраненной комбинацией хэш+соль и, если все в порядке, использовать его для шифрования PDF-документа. Таким образом, пароль пользователя известен вам только в течение короткого промежутка времени, и вам не нужно его сохранять. Другим способом может быть отдельный пароль для шифрования PDF, который полностью находится под вашим исключительным контролем, чтобы он не смешивался с какими-либо другими личными паролями пользователя. - person Jan Slabon; 05.06.2020
comment
Да, однако, похоже, нет способа проверить это через API SETASIGN. У меня нет возможности проверить хэш с помощью этого API. - person g4ost; 05.06.2020
comment
Почему и что вы хотите проверить с помощью SetaPDF? Разве вы не храните хэш + соль? Если это соответствует переданному паролю, просто используйте пароль для шифрования PDF. - person Jan Slabon; 05.06.2020