如何使用 gnupg 和 php 加密文件?

How do I encrypt a file with gnupg and php?

我不是 PGP 专家并且 php 不是我的第一语言,所以我在使用 gnupg 加密文件时遇到了一些问题。我可以让它很好地加密字符串。

如果我使用 PGPTool (windows) 加密我的文件,然后在文本编辑器中打开它,它看起来像二进制数据...

…]/…D2Øþ3EaÚj'ƒ‚Ì
4aœ¶è[Šæ³7=q    [Ûµ|<j‘«™yÅʧÊ[¥å¾•§Ù³,–rnÃƦ⅖iüïÛµèCŠ

如果我读入文件并使用 gnupg 对其进行加密,我会得到一个纯文本结果,就好像要将其粘贴到电子邮件中一样。

-----BEGIN PGP MESSAGE-----
Version: GnuPG v2.0.22 (GNU/Linux)

hQMOAx1dL4VEMtgUEAv/cOuJDBZ8FIYk7kqsh2vOvW2WRUvOUi54xm1LPGxLPiMS

我的问题是,我需要将其作为第一个选项输出以发送给特定客户端。有没有办法让 gnupg 和 php 做到这一点?

参考 PHP-联机帮助页 (https://www.php.net/manual/en/function.gnupg-setarmor.php),默认 输出是一个包含 base64 编码数据的文本文件:

-----BEGIN PGP MESSAGE-----
Version: GnuPG v2.0.22 (GNU/Linux)
hQMOAx1dL4VEMtgUEAv/cOuJDBZ8FIYk7kqsh2vOvW2WRUvOUi54xm1LPGxLPiMS
...

使用 gnupg-setarmor 函数,您可以将输出设置为二进制输出:

gnupg_setarmor($res,0);

完整代码如下:

<?php
// init
$res = gnupg_init();
// # add this line
gnupg_setarmor($res,0); // deactivate default armored output
gnupg_addencryptkey($res,"8660281B6051D071D94B5B230549F9DC851566DC");
$enc = gnupg_encrypt($res, "just a test");
echo $enc;
?>