Laravel 5.6和TCPDF公钥加密

时间:2018-03-04 18:50:17

标签: php laravel encryption pki laravel-5.6

我是PKI的新手,希望有人可以帮我解决我的情况。我目前正在使用Laravel 5.6开发我的网站,我使用elibyy/tcpdf-laravel包来创建PDF。目前,当我的用户创建PDF时,它通过AES 256加密并受密码保护,但我想添加公钥加密。

这是流程,合同是通过HTML创建的,用户签订合同,签名后出现一个复选框和一个完成按钮。他们选中复选框并单击完成。然后,该网页将转换为PDF并存储在AWS S3上。

以下是关于公钥加密的TCPDF文档:

 Possible encryption modes are:
 0 = RSA 40 bit
 1 = RSA 128 bit
 2 = AES 128 bit
 3 = AES 256 bit



NOTES:
 - To create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt
 - To export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12
 - To convert pfx certificate to pem: openssl pkcs12 -in tcpdf.pfx -out tcpdf.crt -nodes

*/

$pdf->SetProtection(array('print', 'copy'), '', null, 0, null);

// Example with public-key
// To open the document you need to install the private key (tcpdf.p12) on the Acrobat Reader. The password is: 1234
//$pdf->SetProtection($permissions=array('print', 'copy'), $user_pass='', $owner_pass=null, $mode=1, $pubkeys=array(array('c' => 'file://../config/cert/tcpdf.crt', 'p' => array('print'))));

// *********************************************************

问题一:我在哪里存储公钥和私钥?在我的Laravel App中?在AWS S3上?

问题二:我是否需要为每份合同生成公钥?

问题三:它说要打开一个文档,你必须在Acrobat Reader上安装私钥,我认为这是用户打开PDF所必须做的事情吗?

我希望有关于此的教程,但我似乎找不到一个。任何帮助是极大的赞赏。谢谢!

1 个答案:

答案 0 :(得分:1)

加密,无论是对称的还是非对称的,都是一个非常引人入胜的话题。但是,你最好知道它,否则很容易创建很容易破解的漏洞。

对于您想要做的事情,坚持使用对称加密,甚至更好地使用包含加密的PKZIP库。既然你提到了PHP,那么你可以通过Google找到几个用于PHP的zip和加密库。

PKI(非对称加密)很难做到正确。例如,您想使用PKI。这意味着您将使用私钥加密文档,客户将使用您的公钥解密文档。这意味着任何人都可以解密,因为公钥只是公开的。您永远不会透露私钥。

管理公钥和私钥本身就是整个服务 - 请查看AWS Key Management Service(KMS)和AWS Certificate Manager(ACM)。

每个私钥只有一个公钥。这些键在数学上是相互关联的(通过素数)。