PHP使用不止一个公钥加密数据

PHP使用不止一个公钥加密数据,php,cryptography,public-key-encryption,gnupg,php-openssl,Php,Cryptography,Public Key Encryption,Gnupg,Php Openssl,我需要使用公钥/私钥系统对数据进行非对称加密(二进制和文本)。 目前我正在使用openssl_seal,因为我需要用多个公钥加密数据。结果我得到了一封加密的邮件(这很好)和两个或更多的信封(这不太好)。后者不太好,因为我还必须将这些信封存储到数据库中。对于每条小消息,我需要存储至少两个信封,这可能比消息本身更大 然后我想起了GnuPG:我可以向多个接收者发送邮件,并可以通过这种方式对邮件进行加密,每个人都可以用自己的私钥解密邮件。不需要信封。 所以我在PHP中寻找GnuPG库,但我只找到了一个l

我需要使用公钥/私钥系统对数据进行非对称加密(二进制和文本)。 目前我正在使用openssl_seal,因为我需要用多个公钥加密数据。结果我得到了一封加密的邮件(这很好)和两个或更多的信封(这不太好)。后者不太好,因为我还必须将这些信封存储到数据库中。对于每条小消息,我需要存储至少两个信封,这可能比消息本身更大

然后我想起了GnuPG:我可以向多个接收者发送邮件,并可以通过这种方式对邮件进行加密,每个人都可以用自己的私钥解密邮件。不需要信封。 所以我在PHP中寻找GnuPG库,但我只找到了一个linux解决方案。不满意,因为我们也有windows系统

是否有任何公钥/私钥库可以使用多个公钥加密消息/数据,而不必费心处理信封

我需要的是一个库,它可以创建2048或4096位的公钥/私钥集

库必须具有使用一个、两个或多个公钥加密任何类型数据的功能,并且只有一个简单的数据块作为结果

库必须具有一个功能,以便可以使用任何相应的私钥对加密数据进行解密

有什么提示或想法吗?也许OpenSSL中有一个特殊的功能?IIRC,我也可以用S/MIME加密向几个收件人发送电子邮件。而且只有1封有很多收件人的电子邮件。没有单独的信封

提前谢谢

Hennes

OpenSSL和OpenPGP(由GnuPG实现)都使用对称加密来加密数据(使用一些随机密钥),然后使用非对称加密来加密密钥,为每个收件人加密一次

在OpenSSL中,这称为“信封”,在OpenPGP中称为“会话密钥包”。两者都包含或多或少相同的数据,因此大小应该相似。我不知道是否可以让OpenSSL将所有这些作为单个blob返回,GnuPG默认情况下是这样做的,但是文件大小不会有明显的不同

进一步评论:

  • 您可以使用
    gpg--list packets
    pgpdump
    查看OpenPGP文件的内容(GnuPG中未包含该文件,但在解析数字ID时提供更好的可读性输出,即使用的算法)
  • GnuPG接口也应该在windows下工作,但据我所知,它需要手动编译
  • 我经常看到人们只是手动调用
    gpg.exe
    二进制文件。但是如果这样做的话要小心,有一些方法会造成安全问题

如果我正确理解您关于GPG/PGP的陈述,您会说a)加密邮件包含所有收件人的所有信封,b)所有收件人都获得所有信封,c)加密邮件的收件人越多,它就越大。这是正确的吗?a)是的,b)是的,除非您单独对每个收件人进行加密(或自己更改OpenPGP数据包),c)对每个收件人进行少量加密,而不依赖于原始数据大小。