一尘不染

在PHP中使用PGP加密文件?

php

我想使用PGP加密来加密CSV文件,我是通过PHP脚本生成的,然后通过电子邮件将该文件发送给客户端。客户端会给我加密密钥,我需要将其用于加密文件。

我在Google上搜索了有关PGP的内容,发现它是“很好的隐私”,我也找到了OpenPGP
http://www.openpgp.org/和GnuPG
http://www.gnupg.org/这两种PGP是什么?我应该使用哪一个?

另外,如何使用客户端提供的密钥在PHP中使用PGP加密文件?

我第一次听说过这个词,请问有人可以帮助您理解和用PHP实现。


阅读 426

收藏
2020-05-29

共1个答案

一尘不染

问题1:关于PGP

  • PGP (Pretty Good Privacy)是Symantec Corporation(几年前购买的)的产品和商标。
  • OpenPGP 是PGP使用的标准。
  • GnuPG (Gnu隐私卫士)是PGP的免费开源实现。

因此,您要做的是加密到 OpenPGP
密钥。您的客户端使用哪种OpenPGP实施来解密数据对您而言并不重要。在PHP中,通常使用GnuPG,并且内置了接口。

问题2:在PHP中使用GnuPG

使用GnuPG接口,它是可以为PHP安装的扩展。

首先,导入密钥,其中$keydata是ASCII铠装公钥:

<?php
$gpg = new gnupg();
$info = $gpg -> import($keydata);
print_r($info);
?>

然后使用此密钥来加密数据,这次使用客户端密钥的指纹:

<?php
  $gpg = new gnupg();
  $gpg -> addencryptkey("8660281B6051D071D94B5B230549F9DC851566DC");
  $enc = $gpg -> encrypt("just a test");
  echo $enc;
?>

如果要加密文件,请阅读并将其传递给encrypt()DEADBEEFDEADBEEF引用密钥时,请确保至少使用长密钥ID(例如)和更好的指纹(如示例中所示);与从不使用短键标识(DEADBEEF),因为这些都容易受到碰撞攻击。


这是一个由PHP手册中的用户添加的更全面的示例。

2020-05-29