PHP使用多个公钥加密数据

时间:2014-05-13 15:46:32

标签: php cryptography public-key-encryption gnupg php-openssl

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

然后我想起了GnuPG:我可以给一个以上的收件人写一封邮件,并且可以加密邮件,每个人都可以用他/她自己的私钥解密邮件。不需要信封。 所以我在PHP中寻找了一个GnuPG库,但我只找到了一个linux解决方案。不满意,因为我们也有Windows系统。

是否有公共/私钥库,它可以使用多个公钥加密消息/数据而不必打扰信封?

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

库必须具有使用一个,两个或更多公钥加密任何类型数据的功能,并且仅具有简单数据块。

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

任何提示或想法?也许OpenSSL中有一个特殊的功能? IIRC,我也可以用几个带有S / MIME加密的收件人写电子邮件。它只有 1 电子邮件,收据很多。没有单独的信封。

提前致谢

亨尼斯

1 个答案:

答案 0 :(得分:2)

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

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

进一步评论:

  • 您可以使用gpg --list-packetspgpdump查看OpenPGP文件的内容(GnuPG不包含该文件,但提供更好的可读输出,并且已解析数字ID,即使用的算法。
  • GnuPG界面也应该在windows下工作,但据我所知,需要手动编译。
  • 我经常看到人们只是手动调用gpg.exe二进制文件。但是要小心,如果这样做,有一些方法可以通过这种方式产生安全问题。