检测PDF是否使用PHP加密的最简单方法

时间:2014-03-28 22:07:07

标签: php pdf encryption detection

我正在尝试找到检测的最佳方法,即使用PHP加密给定的PDF。我不需要解密或编辑它或类似的东西。我们的想法是,如果用户上传加密的PDF,只需向用户提供错误消息。

用于PHP的大多数PDF解析库似乎都需要将整个PDF读入内存才能进行解析。出于我的目的,将整个PDF读入内存是不可接受的,因为我正在处理的PDF可能是几十甚至几百兆字节。

pdfinfo投降不是一个很好的选择(因为我不喜欢启动一个新的过程来执行此操作)但如果没有其他选项,那就是解决方案。我对PDF的二进制结构知之甚少,甚至没有足够的解析器来检测这一点,所以pdfinfo可能是唯一的选择。

TL; DR有一种简单的方法,即纯PHP(无C扩展)来检测PDF是否被加密(也称为密码保护)将整个内容读入内存?< / p>

2 个答案:

答案 0 :(得分:0)

看起来最简单的方法是使用pdflib。虽然这是一个C扩展,但它是最快,最可靠的方法来专门解决这个问题,而不会出现其他程序。

答案 1 :(得分:0)

很遗憾,PDF的“加密”标志(即“ / Encrypt”)位于文件结尾附近。

正常的文件解析功能从文件的开头到结尾(或一定长度)读取文件,因此从逻辑上讲,这意味着如果您要确定pdf是否已加密/受保护,则可能需要读取整个文件,这就是为什么大多数PDF解析库都在读取整个文件进行解析的原因。

当前服务器的性能应该可以毫无问题地处理大型PDF文件。

我个人使用以下脚本,该脚本可以正常运行而不会出现任何性能问题:

<?php
$filename= "./useruploads/". $uploadedfilename; 
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);

if (stristr($contents, "/Encrypt")) 
{echo " (Suspected Enrypted PDF File !)";}
else
{echo " OK ";}  
?>
相关问题