使用Ghostscript可以检查PDF是否受密码保护吗?

7

使用Ghostscript可以检查PDF是否受密码保护吗?相应的命令是什么? 我知道可以使用Ghostscript去除PDF密码, 但是我只想检查PDF是否受密码保护或者安全启用。


我已经开始了一个悬赏,我还想知道是否可能使用其他工具检测有密码保护的PDF文档。 - Benoit
5个回答

11

checkuserpasswdPDF.sh:

的翻译是:

checkuserpasswdPDF.sh:

#!/bin/sh

GS=~/gs/bin/gs
output=`$GS -dBATCH -sNODISPLAY "$1" 2>&1`
gsexit=$?

if [ "$gsexit" == "0" ]; then
  echo "Not user-password protected"
  exit 0;
else
  found=`echo "$output" |grep -o "This file requires a password"`
  if [ -z "$found" ]; then
    echo "Failed to invoke gs" 
    exit $gsexit
  else
    echo "Protected"
    exit 0;
  fi  
fi

检查用户密码保护的PDF文件:checkuserpasswdPDF.sh test.pdf

GS忽略所有者密码(请参见这个链接)。


嗯,这看起来很有前途,我会试一试。 - Aman
这个命令在处理大型PDF文件时需要很长时间,并且会增加服务器负载。 - Rishab

3

使用 pdftk 工具可以通过尝试执行 dump_data 操作来检测用户密码或所有者密码。

 protected=0
 pdftk "input.pdf" dump_data output /dev/null dont_ask || protected=1

这里的问题在于你不知道密码的作用:防止阅读、提取数据、修改等?

2
我尝试过类似的东西,但它有限制,并且 pdftk 并不总是给我正确的结果。 - Aman

3

通过使用bat文件,你可以通过在pdf中搜索“Encrypt”来进行一些变通。这样做可以快速搜索许多文件。

Findstr /M /I "Encrypt" *.pdf 

这将返回所有已加密的文件名(因为在 dos 读取文件时会写入 "Encrypt")

也许有人可以用到这个。我使用:
for /f %%a in ('Findstr /M /I "Encrypt" *.pdf') do move %%a c:\tempfiles\
将所有受保护的PDF移动到c:\tempfiles. 然后我使用ghostscript来删除安全性,并将其移回原始文件夹。


1
请注意,这并不区分所有者密码保护和用户密码保护。此测试仅显示是否存在_任何_密码保护。 - Reza S

2

您可以使用pdfinfo进行测试。

pdfinfo $filename &>/dev/null;
if [[ $? -eq 1 ]] ; then
   echo "File can not be opened for reading"
fi

-1

@Benoit的答案在控制台上会出现丑陋的错误,但是可以正常工作。

因此,我会将其放入一个一行代码中,并抑制错误输出:

protected=0 && pdftk "input.pdf" dump_data output /dev/null dont_ask 2>/dev/null || protected=1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接