我要加密使用PHP PDF文件(我已經找到了一些解決方案在線這一點),但我想讓它這樣的解密可以直接在用戶桌面上的PDF Reader應用程序完成的(而不是從PHP) ?我如何在PHP中創建一個可以在PDF下載器中解密後的加密PDF?
這可能嗎?
場景:
- 用戶填寫表單並提交
- Server創建加密PDF和它的電子郵件給別人
- 接收人將收到新的電子郵件,並打開加密的PDF附件
- PDF在打開的PDF閱讀器並請求私有密鑰(最好)或密碼才能解密
我要加密使用PHP PDF文件(我已經找到了一些解決方案在線這一點),但我想讓它這樣的解密可以直接在用戶桌面上的PDF Reader應用程序完成的(而不是從PHP) ?我如何在PHP中創建一個可以在PDF下載器中解密後的加密PDF?
這可能嗎?
場景:
這不是一個已經RY好主意,因爲這樣你應該:
我認爲最好是用encryption and keys或其他東西做一些基於Web的文檔查看器。
UPD:專有PDFlib允許兼容的加密
UPD2:開源iSafePDF允許它太
這樣做:(摘自: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);
?>
三個問題:1,什麼類型的加密是使用?我可以指定要使用的算法嗎? (例如ElGamal)2.這會打開爲鎖定的PDF,但只是要求輸入密碼? 3.是否有可能要求私鑰而不是密碼? –
1)。 RC4 - 我沒有看到任何選項,但如果你覺得這很麻煩,我相信你可以。 2)。是 - 要求輸入密碼。 3)。我不確定PDF閱讀器是否支持這個功能 - 但是,如果他們這樣做,那麼你肯定可以,只需將'$ password'的值替換爲你的私鑰的值即可。 –
謝謝。如果我至少可以使用AES-128,我寧願用RC4。我認爲私鑰的價值可能是一個長密碼,但這並不理想。 –
# 1沒有意義。我會用公鑰對它進行加密,解密將使用私鑰,而這兩者都不需要在pdf中。 –
@DonRhummy哈哈,是的,沒想到私有密鑰,是PDF加密是通過至少專有讀者允許的,對不起:-) – devlato
@DonRhummy嘗試[這](http://www.pdflib.com/knowledge - 基地/ PDF安全/加密/) - 可能是沒關係 – devlato