我正在开发一个生成试用问题的网络应用程序。所以安全在这个项目中非常重要。当试题的提交完成后,应用程序会创建一个pdf文档。我写一个加密的字符串在文档页脚:如何让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文档被证明来自我的应用程序?
使用仅适用于您的应用的私钥对数字签名进行签名。 – mkl
用只有你知道的masterpw锁定pdf。然后有人可以将ID字符串复制出来,但是由于pdf与您的主密码锁定在一起,因此没有办法(如果您保持密码/安全)来复制该字符串。 –
@pheromix“如何做到这一点” - 我不熟悉PHP PDF签名库,我会知道Java或.Net上下文中的选项。 – mkl