PGP加密 - PHP openssl

4

我有一个本地的名为“key.key”的RSA 2048密钥文件:

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.11 (GNU/Linux)

...
...
...
-----END PGP PUBLIC KEY BLOCK-----

如何在PHP中使用OpenSSL函数加密字符串以进行发送?由于我在共享主机环境中,无法安装GNUpg,因此我认为使用包含的OpenSSL函数是可行的。

我尝试了这种方法,但是出现了“...密钥参数不是有效的公钥...”的错误。

<?php

$text = 'hello jeremy how are you';
$key = openssl_pkey_get_public(chunkfile_get_contents('key.key')); 

openssl_public_encrypt($text, $encrypted, $key);
echo $crypted;
exit;

OpenPGP和SSL除了类似的用例和大多使用RSA之外,没有任何共同之处。但仅此而已。PHP有一个GnuPG模块可用,详见https://dev59.com/jGQo5IYBdhLWcg3wiv0i#15971087。在共享托管中,很可能安装和可用GnuPG。大多数共享托管环境都由Linux运行,并且几乎所有Linux发行版都在其软件包管理器中使用GnuPG。 - Jens Erat
不是我的问题,我尝试运行它,但出现了我经常遇到的某个函数不存在的错误,所以我需要一个替代方案。 - jstudios
1个回答

4

OpenSSL不支持OpenPGP,因为它们的格式和协议是不同的。与PHP一起使用,最合理的方法是使用PHP的GnuPG模块进行接口处理。我在问题Encrypt files using PGP in PHP?中提供了一个示例。如果您可以从PHP执行任意应用程序,则可以直接访问GnuPG,但这很可能会受到限制(并且在利用漏洞方面更加危险)。

如果您被要求发送OpenPGP加密消息但没有访问GnuPG和此模块,请查找提供GnuPG的其他托管公司,要求您当前的提供者这样做或设置自己的Web服务器。


最终使用了 phpseclib,因为它是一个可下载的库。我和我的同事正在努力让它能够使用除 PGP 以外的其他格式。谢谢! - jstudios

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接