我正在开发一个可以产生试验问题的网络应用程序。因此,安全性在项目中非常重要。当完成试验问题的绘制时,应用程序会创建它的pdf文档。我在文档的页脚写了一个加密的字符串:
public function Footer()
{
if ($this->logo != null) {
$this->Image($this->logo, 20, 278, 10, 10, 'PNG', '', 'C', false, 200, '', false, false, 0, false, false, false);
}
$this->SetY(-20);
$this->SetFont('helvetica', 'I', 8);
$this->Cell(0, 20, 'Page '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M');
$this->Cell(0, 20, date("d/m/Y"), 0, 0, 'R', 0, '', 0, false, 'T', 'M');
if ( $this->text_crypter != null ) { // this is the encrypted string
$this->SetY(-7);
$this->SetFont('helvetica', '', 6);
$this->MultiCell(0, 7, $this->text_crypter, false, 'L', false, 0, '', '', true);
}
}
正如您所看到的,加密字符串是在每页的页脚处写的。
但唯一识别文件是从我的应用程序构建的还不够,因为可能有恶意的人可能会复制加密的字符串并将其粘贴到另一个文档中。
那么有什么方法可以证明pdf文档来自我的应用程序?
答案 0 :(得分:2)
(从对问题的评论中收集......)
要唯一标识文档是从您的应用程序构建的,,您应该使用仅适用于您的应用程序的私钥,使您的应用程序使用数字签名对文档进行签名。
ÁlvaroGonzález指出Example 052 : digital signature certification作为如何使用TCPDF应用数字签名的一个例子。
Ryan Vincent解释说,签名包含PDF文档的哈希以及其他详细信息。检查时 - 也检查文档哈希。无法将签名转移到其他文档。检查肯定会失败。
您可以在Adobe Reader中检查集成的PDF签名。确认您的证书确实是签名验证对话框中的签名者证书。
Ryan Vincent指向digital signature和Cryptography Digital signatures教程,了解有关数字签名如何运作的信息。
有关集成PDF签名的详细信息,请查看信息安全堆栈交换中的this answer以及从那里引用的文档。