当前位置: 首页 > 面试题库 >

在PHP中使用PGP加密文件?

韩弘壮
2023-03-14
问题内容

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

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

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

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


问题答案:

问题1:关于PGP

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

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

问题2:在PHP中使用GnuPG

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

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

<?html" target="_blank">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手册中的用户添加的更全面的示例。



 类似资料:
  • 问题内容: 我有一个名为’filename.txt.pgp’的PGP文件,需要解密。当我从命令行运行解密时,它仅询问我密码。我使用gpg命令: 密码足够,我的文件已解密。我可以阅读它的内容。 现在,我应该用Java创建一个实用程序。经过研究,我发现Bouncy Castle图书馆是我最好的选择。但是我可以找到的所有Java示例都使用我没有的公共/专用密钥文件。 您能帮我举一个Java示例,该示例仅

  • 我正在尝试使用PGP实现加密,我的encrypt方法成功地加密了输入字符串,但当我尝试解密它以验证加密是否正确时,字符串没有被解密。 我尝试了两种方法: 我假设只有直接由OutputStream创建的文件能够成功解密。但我必须真的检查加密字符串。 如有任何帮助,我们将不胜感激。

  • 问题内容: PHP 5.3是否有任何类可提供RSA加密/解密而无需填充? 我有私钥和公钥,p,q和模数。 问题答案: 您可以使用phpseclib,这是一个纯PHP RSA实现:

  • 我一直在尝试使用BouncyCastle库来进行PGP加密/解密。我有一些代码需要修改,以便只使用流-不使用文件。 我尝试移除pgputilities.writeFileToliteralData(),然后让它返回一个流,但没有成功(输出流为空)。 这里更明确的是方法应该是什么: 下面是我需要修改的代码:

  • 问题内容: 我正在用Python编写程序,以通过安装程序分发给Windows用户。 该程序需要能够每天下载使用用户公钥加密的文件,然后再解密。 因此,我需要找到一个Python库,该库将允许我生成公共和私有PGP密钥,并解密使用该公共密钥加密的文件。 pyCrypto是否会做这件事(文档模糊)?还有其他纯Python库吗?使用任何语言的独立命令行工具如何? 到目前为止,我所看到的只是GNUPG,但

  • 我正在尝试编写一个加密文件,它将使用gpg解密,并将以增量方式写入行,而不是在一个块中。我已经在GnuPG中生成了密钥,并且正在使用公钥加密。下面是我正在使用的加密方法: 我有一个小的原型测试类来使用这种方法: 我怎样才能修改这段代码,使它既能加密两行,又能让GnuPG解密它们呢?