gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:44:34 26 4
gpt4 key购买 nike

我试图找到检测给定 PDF 是否使用 PHP 加密的最佳方法。我不需要解密或编辑它或类似的东西。这个想法是在用户上传加密的 PDF 时简单地向用户提供错误消息。

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

打到 pdfinfo不是一个很好的选择(因为我不喜欢启动一个新流程来执行此操作)但如果没有其他选择,这就是解决方案。我对 PDF 的二进制结构知之甚少,甚至无法编写足够的解析器来检测这种情况 pdfinfo可能是唯一的选择。

TL;DR 是否有一种简单的方法是纯 PHP(无 C 扩展)来检测 PDF 是否已加密(又名密码保护),该方法 不是 将整个内容读入内存?

最佳答案

不幸的是,PDF 的加密标志(即“/加密”)接近文件末尾。

正常的文件解析函数从文件的开头到结尾(或达到一定长度)读取文件,因此从逻辑上讲,如果您想确定 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 ";}
?>

关于php - 检测 PDF 是否使用 PHP 加密的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22724009/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com