0

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

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

是否有任何公钥/私钥库可以使用多个公钥加密消息/数据而无需担心信封?

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

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

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

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

提前致谢

亨内斯

4

1 回答 1

2

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

在 OpenSSL 中,这在 OpenPGP "Session Key Packet"中称为"envelope " 。两者都包含或多或少相同的数据,因此应该具有相似的大小。我不知道你是否可以让 OpenSSL 将所有这些作为单个 blob 返回,GnuPG 默认会这样做——但文件大小不会有明显不同。

补充说明:

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