2014-02-05 46 views
0

我要加密使用PHP PDF文件(我已經找到了一些解決方案在線這一點),但我想讓它這樣的解密可以直接在用戶桌面上的PDF Reader應用程序完成的(而不是從PHP) ?我如何在PHP中創建一個可以在PDF下載器中解密後的加密PDF?

這可能嗎?

場景:

  1. 用戶填寫表單並提交
  2. Server創建加密PDF和它的電子郵件給別人
  3. 接收人將收到新的電子郵件,並打開加密的PDF附件
  4. PDF在打開的PDF閱讀器並請求私有密鑰(最好)或密碼才能解密

回答

0

這不是一個已經RY好主意,因爲這樣你應該:

  1. 商店生成的PDF文件 這顯然是不可靠的內部密鑰或密碼;
  2. OR:發送輸入的密鑰一些服務器,但PDF格式 不允許;
  3. OR:有一些支持 定製非標準擴展,也不是一個最好的 decition的實現自己的PDF閱讀器。

我認爲最好是用encryption and keys或其他東西做一些基於Web的文檔查看器。

UPD:專有PDFlib允許兼容的加密

UPD2:開源iSafePDF允許它太

+0

# 1沒有意義。我會用公鑰對它進行加密,解密將使用私鑰,而這兩者都不需要在pdf中。 –

+0

@DonRhummy哈哈,是的,沒想到私有密鑰,是PDF加密是通過至少專有讀者允許的,對不起:-) – devlato

+0

@DonRhummy嘗試[這](http://www.pdflib.com/knowledge - 基地/ PDF安全/加密/) - 可能是沒關係 – devlato

2

這樣做:(摘自:How to create a passsword protected pdf file

http://www.idsecuritysuite.com/blog/wp-content/uploads/fpdi.zip

<?php 
    function pdfEncrypt ($origFile, $password, $destFile){ 
     require_once('FPDI_Protection.php'); 
     $pdf =& new FPDI_Protection(); 
     $pdf->FPDF('P', 'in'); 
     //Calculate the number of pages from the original document. 
     $pagecount = $pdf->setSourceFile($origFile); 
     //Copy all pages from the old unprotected pdf in the new one. 
     for ($loop = 1; $loop <= $pagecount; $loop++) { 
      $tplidx = $pdf->importPage($loop); 
      $pdf->addPage(); 
      $pdf->useTemplate($tplidx); 
     } 

     //Protect the new pdf file, and allow no printing, copy, etc. and 
     //leave only reading allowed. 
     $pdf->SetProtection(array(), $password); 
     $pdf->Output($destFile, 'F'); 
     return $destFile; 
    } 

    //Password for the PDF file (I suggest using the email adress of the purchaser). 
    $password = "testpassword"; 
    //Name of the original file (unprotected). 
    $origFile = "sample.pdf"; 
    //Name of the destination file (password protected and printing rights removed). 
    $destFile ="sample_protected.pdf"; 
    //Encrypt the book and create the protected file. 
    pdfEncrypt($origFile, $password, $destFile); 
?> 
+0

三個問題:1,什麼類型的加密是使用?我可以指定要使用的算法嗎? (例如ElGamal)2.這會打開爲鎖定的PDF,但只是要求輸入密碼? 3.是否有可能要求私鑰而不是密碼? –

+0

1)。 RC4 - 我沒有看到任何選項,但如果你覺得這很麻煩,我相信你可以。 2)。是 - 要求輸入密碼。 3)。我不確定PDF閱讀器是否支持這個功能 - 但是,如果他們這樣做,那麼你肯定可以,只需將'$ password'的值替換爲你的私鑰的值即可。 –

+0

謝謝。如果我至少可以使用AES-128,我寧願用RC4。我認爲私鑰的價值可能是一個長密碼,但這並不理想。 –