我正在開發一個生成試用問題的網絡應用程序。所以安全在這個項目中非常重要。當試題的提交完成後,應用程序會創建一個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