Шифрование PDF с помощью qpdf и только пароля пользователя

NR— общее количество обработанных записей (включая обрабатываемую в данный момент ); FNR— количество обработанных записей в текущем файле . Это произойдет только для первого файла.

FNR==NR {
  if (split($1,a, "_") ==3)
  f1[$1]
next
}

Точно так же NF— это количество полей в текущей записи. Если это пустая строка, это будет ноль, что является «ложным» (, а не «истинным» ), поэтому этот блок будет выполняться только для непустых -строк. Запишите код в этом блоке, где установлено значение p; это будет важно позже. ORS— разделитель выходных записей; это то, что отделяет каждую запись по мере ее записи. По умолчанию это новая строка. Здесь условно используется как значение для переменной rec.

NF{
if (split($1, a, "_") ==3 && $1 in f1)
  p=1
  rec=(!rec)?$0:rec ORS $0
next
}

Этот последний блок будет выполняться только в том случае, если значение pявляется «истинным».

p{
  print rec ORS
  p=0; rec=""
}
2
17.08.2019, 21:48
1 ответ

Изюминка :скорее всего, вы действительно хотите использовать пустую строку для пароля пользователя и не -пустую строку для пароля владельца, а не наоборот. Если вы сделаете это, люди смогут открыть файл без ввода пароля, но совместимые средства просмотра по-прежнему будут обеспечивать безопасность документа. Открытие с паролем владельца позволит вам изменить безопасность в таком инструменте, как Adobe Acrobat. Обратите внимание, что qpdf игнорирует безопасность файла во всех случаях и обрабатывает пароли пользователя и владельца одинаково.

Я попытаюсь объяснить, что происходит.

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

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

Из-за такого поведения некоторые приложения пытаются открыть зашифрованный пароль, используя пустую строку в качестве пароля пользователя, и если это не удается, они будут запрашивать пароль. Некоторые пакеты, в том числе qpdf, будут пытаться определить, может ли пароль владельца быть пустым, даже если пароль пользователя не пуст, и даже если в этом нет особого смысла. Это объяснило бы поведение, которое вы видите. Я полагаю, что более старые версии Adobe Acrobat вообще не позволят администратору получить доступ к файлу, если пароль пользователя и владельца совпадают или если пароль пользователя установлен, а пароль владельца пуст, потому что они пытаются проверить пароль владельца только в том случае, если предоставленный пароль не работает как пароль пользователя.

Надеюсь, это объясняет наблюдаемое вами поведение.

2
27.01.2020, 22:16

Теги

Похожие вопросы